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" 代码。
我在我的项目中使用 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" 代码。