从长远来看,它是关于将自动释放的属性分配给保留属性。如果这样做会发生什么,如下所示。
@property(strong, nonatomic) NSString *new;
...
NSString *old = [NSString stringWithFormat:@"%@ %@"), @"hello", @"world"];
new = old;
答案 0 :(得分:1)
添加我对您的问题的评论:
阅读本文
它描述了可以声明变量的不同类型的生命周期限定符,并给出了每个限定符的示例。
使用相关位进行编辑:
您可以使用的终身限定符是:
__强
__弱
__ unsafe_unretained
__自动释放
他们的描述在文档中,但我将进入第一个2.
__strong
是默认类型(当你没有指定一个时),它会将对象的保留计数增加1.只要有一个强指针指向一个对象,它就会保留活着。
__weak
不会增加对象的保留计数,也不会使其保持活动状态。如果没有指向同一对象的强引用,则弱指针将自动设置为nil。 (__unsafe_unretained
实际上几乎和弱者一样,但它们悬空而不是被设置为零。
如果您创建一个立即分配给弱指针的对象,它将立即被释放,因为没有强引用它。
来自docs的示例代码:
NSString * __weak string = [[NSString alloc] initWithFormat:@"First Name: %@", [self firstName]];
NSLog(@"string: %@", string);
在这种情况下尝试打印时,string
的值将为null。
如果要引用的对象已经具有至少一个强引用,则只能使用弱指针。否则,(新)对象将立即解除分配。