簡體   English   中英

iVars引用強,弱還是什么?

[英]iVars references strong, weak or what?

在Obj-C中,屬性可以配置為弱/強。 實例變量。 喜歡以下 -

@interface MyClass {
NSObject *a;
}

請問MyClass的的對象保持弱引用a或強,或其他什么東西? 我認為iVar在其對象發布之前不會發布。 為什么我們不為iVar屬性指定弱/強?

對ivar的默認引用是__strong ,但您可以將其顯式設置為__weak__strong


您的問題激發了我的靈感,並對ObjectiveC內存管理進行了深入研究。 我想與你分享一些我從Apple Doc獲得的東西。

實例變量的默認行為

默認情況下,實例變量保持對對象的強引用

為什么我們不為iVar屬性指定弱/強?

默認情況下,局部變量和非屬性實例變量保持對對象的強引用。 沒有必要明確指定強屬性,因為它是默認屬性。
只要該變量在范圍內,或者直到將其重新分配給另一個對象或nil,變量就會保持對對象的強引用。

如果您不希望變量維護強引用,可以將其聲明為__weak,如下所示:

  NSObject * __weak weakVariable;
@interface MyClass {
__weak NSObject *a;
__strong NSObject *a;
__unsafe_unretained NSObject *obj;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM