我在我的项目中使用UIActionSheet
:
self.actionSheet = [[[UIActionSheet alloc] initWithTitle:nil] autorelease];
这是对象:
@property (nonatomic, retain) UIActionSheet *actionSheet;
在UIActionSheet
被解雇后,我想发布它并使用此代码将其nil
:
[self.actionSheet release];
self.actionSheet = nil;
但是,当我这样做时,应用程序崩溃,任何想法为什么会发生?
答案 0 :(得分:2)
手动调用release
是问题所在。使用属性的合成setter时,它会正确释放前一个对象。
您应该将代码更改为:
self.actionSheet = nil;
或者,如果您希望手动释放,请将基础实例变量设置为nil
,如下所示:
[self.actionSheet release];
_actionSheet = nil;
根据评论中的建议,您应该将代码迁移到ARC。如果您无法迁移所有代码,您仍然可以迁移其中的大部分代码,并且只在MRC中保留“有问题”的代码。