मुझे उत्सुकता है कि अगला कोड मजबूत संदर्भ चक्र का नेतृत्व करेगा?क्या एनम अपनी संबंधित वस्तु को बरकरार रखता है?
enum Type {
case some(obj:Any)
}
class Entity {
var type:Type
init() {
type = Type.some(obj:self)
}
}
मुझे उत्सुकता है कि अगला कोड मजबूत संदर्भ चक्र का नेतृत्व करेगा?क्या एनम अपनी संबंधित वस्तु को बरकरार रखता है?
enum Type {
case some(obj:Any)
}
class Entity {
var type:Type
init() {
type = Type.some(obj:self)
}
}
हां। Any
स्पष्ट रूप से मजबूत है। यदि आप संदर्भ प्रकार पास करते हैं, तो यह एक मजबूत संदर्भ होगा। यह काफी "चक्र" नहीं है क्योंकि कुछ भी एक enum "retains" नहीं है, लेकिन जब तक मान मौजूद है (या मूल्य की कोई प्रति), यह Entity
पर रखेगा और इसे हटाए जाने से रोक देगा।
कल्पना कीजिए कि यह सच नहीं है। .some(obj: NSObject())
में क्या होगा? यदि Type.some
ने बनाए रखने की गणना में वृद्धि नहीं की है, तो NSObject
गायब हो जाएगा। (के बाद से यह बहुत ही एक Optional
के समान है, कि, बहुत ही आश्चर्य होगा के बाद से कई T?
तुरंत nil
बन जाएगा।)
BTW, यह आसानी से और उपयोगी Entity
पर एक deinit
विधि बनाने के द्वारा पता लगाया जाता है।
के रूप में मानें, इसलिए 'टाइप' प्रॉपर्टी एनम केस में लपेटकर स्वयं को बनाए रखेगी? –
ठीक है, मैंने इसे डेनिट का उपयोग करके चेक किया है, और इसे कभी भी टाइप नहीं किया जाता है जब तक टाइप = Type.some (obj: self) ' –
वह कोड संदर्भ चक्र नहीं बना सकता है क्योंकि 1) कोई ऑब्जेक्ट नहीं बनाया गया है, 2) कोड बिल्कुल संकलित नहीं होता है। –
@ मार्टिनआर, दाएं। इसे स्यूडोकोड –