![](/img/trans.png)
[英]what are the differences between __strong and strong, __weak and weak?
[英]what is the difference between strong and weak property?
由於iOS 5中的強弱屬性是新的。如果有人告訴我何時使用了哪個屬性。
什么時候應該使用強者還是應該使用弱者?
@property(nonatomic,strong)
@property(nonatomic,weak)
strong
就像retain
, weak
就像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.