2017-06-26 23 views
6

मुझे उत्सुकता है कि अगला कोड मजबूत संदर्भ चक्र का नेतृत्व करेगा?क्या एनम अपनी संबंधित वस्तु को बरकरार रखता है?

enum Type { 
    case some(obj:Any) 
} 

class Entity { 
    var type:Type 
    init() { 
     type = Type.some(obj:self) 
    } 
} 
+0

वह कोड संदर्भ चक्र नहीं बना सकता है क्योंकि 1) कोई ऑब्जेक्ट नहीं बनाया गया है, 2) कोड बिल्कुल संकलित नहीं होता है। –

+0

@ मार्टिनआर, दाएं। इसे स्यूडोकोड –

उत्तर

4

हां। Any स्पष्ट रूप से मजबूत है। यदि आप संदर्भ प्रकार पास करते हैं, तो यह एक मजबूत संदर्भ होगा। यह काफी "चक्र" नहीं है क्योंकि कुछ भी एक enum "retains" नहीं है, लेकिन जब तक मान मौजूद है (या मूल्य की कोई प्रति), यह Entity पर रखेगा और इसे हटाए जाने से रोक देगा।

कल्पना कीजिए कि यह सच नहीं है। .some(obj: NSObject()) में क्या होगा? यदि Type.some ने बनाए रखने की गणना में वृद्धि नहीं की है, तो NSObject गायब हो जाएगा। (के बाद से यह बहुत ही एक Optional के समान है, कि, बहुत ही आश्चर्य होगा के बाद से कई T? तुरंत nil बन जाएगा।)

BTW, यह आसानी से और उपयोगी Entity पर एक deinit विधि बनाने के द्वारा पता लगाया जाता है।

+0

के रूप में मानें, इसलिए 'टाइप' प्रॉपर्टी एनम केस में लपेटकर स्वयं को बनाए रखेगी? –

+0

ठीक है, मैंने इसे डेनिट का उपयोग करके चेक किया है, और इसे कभी भी टाइप नहीं किया जाता है जब तक टाइप = Type.some (obj: self) ' –

संबंधित मुद्दे