簡體   English   中英

NSString的Objective-C ARC和__weak

[英]Objective-C ARC and __weak for NSString

NSString __weak *string = [[NSString alloc] initWithFormat:@"First Name: %@", @"Braj"];
NSLog(@"string:%@", string);


NSString __weak *string2=@"Hello";
NSLog(@"string:%@", string2);

NSString __weak *string3 =[[NSString alloc]initWithString:@"Braj"];
NSLog(@"string:%@",string3);

在這里,第一個字符串的輸出為null,另外兩個字符串對象的ans分別為Hello和Braj。 我很困惑這里如何處理弱引用。

“弱”表示指針變量不包含對對象的引用,因此指針允許對象被釋放。 發生這種情況時,指針將設置為nil。

因此,第一個NSLog可以滿足您的期望。 沒有對該對象的強引用,因此該對象立即變為nil。

在第二種情況下,您具有字符串文字。 字符串文字是不同的:它們實際上永遠不會消失。 它們是使用一些巧妙的技巧創建的,這意味着如果釋放它們,將不會保存任何內存。

第三種情況:[[NSString alloc] initWithString:aString]很聰明。 如果沒有必要,它實際上不會分配新的字符串! 如果aString是不可變的字符串,則結果是aString而不是新對象。 您向其傳遞了字符串文字,因此結果就是該字符串文字。 回到案例2 :-)

當其他人釋放對對象的最后一個強引用時,弱引用可能變為零。 但是您的代碼永遠不知道誰可能在后台擁有強引用,因此您永遠不能依賴弱引用變為零。

暫無
暫無

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

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