解雇后发布UIActionSheet

时间:2016-03-13 12:19:51

标签: ios objective-c uiactionsheet

我在我的项目中使用UIActionSheet

self.actionSheet = [[[UIActionSheet alloc] initWithTitle:nil] autorelease];

这是对象:

@property (nonatomic, retain) UIActionSheet *actionSheet;

UIActionSheet被解雇后,我想发布它并使用此代码将其nil

[self.actionSheet release];
self.actionSheet = nil;

但是,当我这样做时,应用程序崩溃,任何想法为什么会发生?

1 个答案:

答案 0 :(得分:2)

手动调用release是问题所在。使用属性的合成setter时,它会正确释放前一个对象。

您应该将代码更改为:

self.actionSheet = nil;

或者,如果您希望手动释放,请将基础实例变量设置为nil,如下所示:

[self.actionSheet release];
_actionSheet = nil;

根据评论中的建议,您应该将代码迁移到ARC。如果您无法迁移所有代码,您仍然可以迁移其中的大部分代码,并且只在MRC中保留“有问题”的代码。