在dealloc,Objective C中释放实例变量的正确方法

时间:2014-03-28 11:30:32

标签: objective-c cocoa instance-variables accessor dealloc

我一直想知道在类的dealloc方法中释放实例变量的正确方法。假设我有一个名为myString的实例变量,

// MyClass.h
{
NSString *myString;
}
@property(nonatomic,retain) NSString *myString;

// MyClass.m
@synthesize myString;

-(void)dealloc
{
[self setMyString: nil]; 
[super dealloc];
}

Apple文档指出Don’t Use Accessor Methods in Initializer Methods and dealloc。我发现一些将实例变量设置为nil的输入用于释放实例变量(我在上面的dealloc方法中执行)。那么,如果这是发布实例变量的正确方法,那么为什么Apple说不建议在dealloc方法中使用访问器?

1 个答案:

答案 0 :(得分:3)

你应该在对象上调用release;

-(void)dealloc {
   [myString release], myString = nil;
   [super dealloc];
}

它与多线程有关,其中可能还有一些其他线程也访问该属性。

但你应该更多地ARC,那么你不必将dealloc添加到任何对象中,编译器将为你的编译时添加保留/释放消息。

Apple发布了一个不错的Transitioning to ARC Release Notes