我有一个类,在.h文件中定义了一个属性:
@property (retain) NSString *fontName;
在.m文件中,我发布了属性:
-(void)dealloc {
[super dealloc];
[_fontName release];
}
现在我偶尔会在[_fontName release]上收到EXC_BAD_ACCESS错误。这种情况非常罕见,我不确定如何调试它。发布@property(保留)是否正确?或者[超级dealloc]已经这样做了吗?
答案 0 :(得分:6)
执行super dealloc
之后:
-(void)dealloc {
[_fontName release];
[super dealloc];
}
简而言之,在杀死自己之前杀死你的孩子。
答案 1 :(得分:0)
更传统的方法是简单地释放您的实例变量并让它们指向已发布(并且可能已取消分配)的对象,如下所示:
- (void)dealloc
{
[_fontName release];
[super dealloc];
}
在这种方法中,每个指针将指向一个潜在的无效对象很短的时间 - 直到方法返回 - 此时实例变量将与其拥有的对象一起消失。在单线程应用程序中(指针必须由该对象的dealloc实现中的代码或其超类的dealloc中的代码触发的东西访问,实例变量在它们出现之前几乎不可能被使用)离开,这可能导致了几个人的声明,即在dealloc中“将实例变量设置为nil没有价值”。