在dealloc中释放保留属性?

时间:2014-03-14 10:57:36

标签: ios objective-c memory-management retain

我有一个类,在.h文件中定义了一个属性:

@property (retain) NSString *fontName;

在.m文件中,我发布了属性:

-(void)dealloc {
    [super dealloc];
    [_fontName release];
}

现在我偶尔会在[_fontName release]上收到EXC_BAD_ACCESS错误。这种情况非常罕见,我不确定如何调试它。发布@property(保留)是否正确?或者[超级dealloc]已经这样做了吗?

2 个答案:

答案 0 :(得分:6)

执行super dealloc之后:

-(void)dealloc {
    [_fontName release];
    [super dealloc];
}

简而言之,在杀死自己之前杀死你的孩子。

答案 1 :(得分:0)

更传统的方法是简单地释放您的实例变量并让它们指向已发布(并且可能已取消分配)的对象,如下所示:

- (void)dealloc
{

    [_fontName release];

    [super dealloc];
}

在这种方法中,每个指针将指向一个潜在的无效对象很短的时间 - 直到方法返回 - 此时实例变量将与其拥有的对象一起消失。在单线程应用程序中(指针必须由该对象的dealloc实现中的代码或其超类的dealloc中的代码触发的东西访问,实例变量在它们出现之前几乎不可能被使用)离开,这可能导致了几个人的声明,即在dealloc中“将实例变量设置为nil没有价值”。