簡體   English   中英

強弱財產有什么區別?

[英]what is the difference between strong and weak property?

由於iOS 5中的強弱屬性是新的。如果有人告訴我何時使用了哪個屬性。

什么時候應該使用強者還是應該使用弱者?

@property(nonatomic,strong)

@property(nonatomic,weak)

strong就像retainweak就像assign 主要區別在於,當分配給它們的對象被釋放時, weak屬性變為nil

例如:

@property (nonatomic, weak) id test;

...

- (void)example
{
    id foo = [[NSObject alloc] init];
    self.test = foo;
    foo = [[NSObject alloc] init];
    assert(self.test == nil);
}

Strong意味着只要此屬性指向一個對象,該對象就不會自動釋放。 在非ARC中,它是retain的同義詞。

相反, Weak意味着屬性指向的對象可以自由釋放,但前提是它將屬性設置為nil 在ARC中,您使用weak來確保您不擁有它指向的對象。

查看Apple文檔以獲取自動參考計數(ARC)

如果您沒有時間閱讀它:

ARC為對象和弱引用引入了幾個新的生命周期限定符。 弱引用不會延長它指向的對象的生命周期,並且在沒有對該對象的強引用時自動變為nil。

是默認的。 只要存在指向它的強指針,對象就會保持“活着”。

weak指定不保持引用對象存活的引用。 當沒有對象的強引用時,弱引用設置為nil。

由於iOS 5 ARC自動使弱鏈接無效,因此在卸載對象時,其對象層次結構將自動設置為nil。 由於這個原因, Weak是所有outlet屬性的推薦關系。 這些視圖對象已經是視圖控制器視圖層次結構的一部分,不需要在其他地方保留。 聲明你的網點很弱的一大優點是它可以節省你編寫viewDidUnload方法的時間。

查看一個非常詳細的文檔,參考內存管理 它是ARC之前的版本,但它可以幫助您理解內存管理。 屬性的retain關鍵字仍然適用於ARC,只是strong的同義詞。 或者另一個特定的ARC教程

強弱之間存在以下差異。

1.如果我們聲明變量強,那么它不會被編譯器解除分配,直到內存中的Application實例。當我們將nil值設置為該引用時,它會被編譯器解除分配,默認情況下任何局部變量都是強變量。 例如: - var str =“hello world”

如果我們設置str = nil則將其解除分配。

2.如果我們將變量聲明為強,那么它將被其他實例(Class)保留,並且它將保持計數增量1。

財產薄弱。

1.當我們聲明弱屬性時,它只包含數據/實例地址,直到強引用在內存中,如果強大的變量引用被釋放,它將自動設置為nil。

例如: - var str =“hello world”weak var stringVar = str

假設str包含200個堆地址,我們設置str = nil,然后由編譯器自動將弱屬性引用設置為nil。

所以這就是stoary board ref controller的原因,主視圖只設置為strong而其他弱者為ex-我們可以看到UIButton,UILabel out let等

暫無
暫無

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

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