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,其他两个字符串对象分别给出了Hello和Braj。 我在这里很困惑如何处理__weak参考。
答案 0 :(得分:1)
"弱"表示指针变量不保存对象的引用,因此指针允许对象被释放。发生这种情况时,指针设置为nil。
所以第一个NSLog会做你应该期待的。没有强烈的参考对象,所以它立即变为零。
在第二种情况下,您有一个字符串文字。字符串文字是不同的:它们实际上永远不会消失。它们是使用一些聪明的技巧创建的,这意味着如果它们被释放,则不会保存任何内存。
第三种情况:[[NSString alloc] initWithString:aString]很聪明。如果没有必要,它实际上并没有分配新的字符串!如果aString是不可变的字符串,则结果是aString而不是新对象。你传递了一个字符串文字,结果是字符串文字。回到案例2: - )
当其他人释放对象的最后一个强引用时,弱引用可能变为零。但是你的代码永远不会知道谁可能拥有强大的参考(在幕后),所以你永远不能依赖弱引用变为零。