我一直想知道在类的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
方法中使用访问器?
答案 0 :(得分:3)
你应该在对象上调用release;
-(void)dealloc {
[myString release], myString = nil;
[super dealloc];
}
它与多线程有关,其中可能还有一些其他线程也访问该属性。
但你应该更多地ARC
,那么你不必将dealloc
添加到任何对象中,编译器将为你的编译时添加保留/释放消息。
Apple发布了一个不错的Transitioning to ARC Release Notes