将“Assign”属性设置为零的对象
问题描述:
如果我使用“Assign”属性定义了变量,那么可以将它们设置为dealloc方法中的nil吗?将“Assign”属性设置为零的对象
@property (nonatomic, assign) id test;
- (void)dealloc {
self.test = nil;
}
答
直接释放伊娃最好。如果一个子类覆盖了一个属性的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
!
答
取决于如何你这样做,如果你通过属性setter做到这一点(不推荐),然后是。
如果你做直接任务,那么不行,因为保留的对象会泄漏。
所以这是好的:
- (void) dealloc {
self.test = nil;
[super dealloc];
}
但这是一个不走:
- (void) dealloc {
test = nil;
[super dealloc];
}
我的建议是只发送release
消息到所有保留的高德的-dealloc
,这将很好地工作,因为如果test
碰巧是nil
,那么什么都不会发生。
相信我。直接在-dealloc
发送release
。就这些。
- (void) dealloc {
[test release];
[super dealloc];
}
分配它有什么问题? – Abhinav 2011-01-19 23:04:16
它不会调用setter,所以它会泄漏对象而不是释放它。 – 2011-01-19 23:05:38