UIActionSheet 解雇后释放

UIActionSheet release after dismiss

我在我的项目中使用 UIActionSheet

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

这是对象:

@property (nonatomic, retain) UIActionSheet *actionSheet;

UIActionSheet 被关闭后,我想释放它并使用此代码使其成为 nil

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

但是当我这样做时,应用程序崩溃了,知道为什么会这样吗?

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

您应该将代码更改为:

self.actionSheet = nil;

或者,如果您更喜欢手动释放,请将底层实例变量设置为 nil,如下所示:

[self.actionSheet release];
_actionSheet = nil;

按照评论中的建议,您应该将代码迁移到 ARC。如果您不能迁移所有代码,您仍然可以迁移大部分代码,并且只保留 MRC 中的 "problematic" 代码。