0

在旧术语中,它是关于将自动释放的属性分配给保留属性。如果这样做会发生什么,如下所示。

@property(strong, nonatomic) NSString *new;

... 

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

1 回答 1

1

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

读这个

变量限定符

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

使用相关位进行编辑:

您可以使用的生命周期限定符是:

__强的

__虚弱的

__unsafe_unretained

__自动释放

他们的描述在文档中,但我将进入前 2 个。

__strong是默认类型(当您不指定时),它会将对象的保留计数增加 1。只要有指向对象的强指针,它就会保持活动状态。

__weak不会增加对象的保留计数,也不会使其保持活动状态。如果没有指向同一个对象的强引用,弱指针将自动设置为 nil。(__unsafe_unretained实际上几乎与弱相同,但它们被悬空而不是设置为零)。

如果您创建一个立即分配给弱指针的对象,它将立即被释放,因为没有对其的强引用。

来自文档的示例代码:

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

string在这种情况下尝试打印时,的值将为空。

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

于 2012-05-18T17:58:06.707 回答