使用Copy属性释放ivar

时间:2010-07-18 04:13:48

标签: iphone objective-c memory-management

如果我有课

@interface Foo {
    NSString *temp;
}

@property(nonatomic, copy) NSString *temp;

@end

据我所知,在分配时,旧的temp将被释放,新的temp将使用temp = [newTemp copy]分配。按照内存管理规则,你应该在Foo的dealloc方法中做[temp release],对吧?

我不明白如果从未使用过setter会发生什么 - 你仍然在dealloc中有[temp release],所以它会释放一些保留计数为0.有人可以为我澄清一下吗?

1 个答案:

答案 0 :(得分:3)

有两种可能性。

  1. 由于您从未设置它,因此它是nil。将release发送到nil就可以了。所以没问题。

  2. 您的init例程为temp设置了默认值。然后它是一个真实的对象,发送它release也没关系。

  3. 周围没问题!在这两种情况下,您都不会向保留计数为0的对象发送消息。