如果将一个弱房产分配给一个强大的房产,会发生什么?

时间:2012-05-18 17:21:40

标签: objective-c retain autorelease

从长远来看,它是关于将自动释放的属性分配给保留属性。如果这样做会发生什么,如下所示。

@property(strong, nonatomic) NSString *new;

... 

NSString *old = [NSString stringWithFormat:@"%@ %@"), @"hello", @"world"];
new = old;

1 个答案:

答案 0 :(得分:1)

添加我对您的问题的评论:

阅读本文

Variable Qualifiers

它描述了可以声明变量的不同类型的生命周期限定符,并给出了每个限定符的示例。

使用相关位进行编辑:

您可以使用的终身限定符是:

  

__强

     

__弱

     

__ 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。

如果要引用的对象已经具有至少一个强引用,则只能使用弱指针。否则,(新)对象将立即解除分配。