如果我使用“Assign”属性定义变量,那么在dealloc方法中将它们设置为nil是否可以?
@property (nonatomic, assign) id test;
- (void)dealloc {
self.test = nil;
}
答案 0 :(得分:4)
最好直接释放ivar。如果子类重写属性的setter方法,则对象可能会泄漏,因为未调用setter。考虑:
@interface ClassA
@property (readwrite, retain) id anObject;
@end
@interface ClassB : ClassA
@end
@implementation ClassA
@synthesize anObject;
- (void)dealloc {
self.anObject = nil;
[super dealloc];
}
@end
@implementation ClassB
- (void)setAnObject: (id)anObject {
// do nothing!
}
@end
ClassB的实例将泄漏anObject
!
答案 1 :(得分:1)
如果您通过属性设置器(不推荐)进行 如何,那么是。
如果您直接分配,那么否,因为保留的对象会泄漏。
所以这很好:
- (void) dealloc {
self.test = nil;
[super dealloc];
}
但这是禁止:
- (void) dealloc {
test = nil;
[super dealloc];
}
我的建议是将release
消息发送到-dealloc
中所有保留的ivars,这样可以很好地处理,因为如果test
恰好是nil
,那么什么都不会发生。
相信我。直接在release
发送-dealloc
。就是这样。
- (void) dealloc {
[test release];
[super dealloc];
}