【问题标题】:UIActionSheet release after dismiss解雇后 UIActionSheet 释放
【发布时间】:2016-03-14 01:39:07
【问题描述】:

我在我的项目中使用UIActionSheet

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

这是对象:

@property (nonatomic, retain) UIActionSheet *actionSheet;

UIActionSheet 被解雇后,我想释放它并使用以下代码使其成为nil

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

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

【问题讨论】:

  • 您必须使用启用 ARC 的代码...自动发布已成为历史。
  • @iAnurag 我没有意识到 Apple 已经从编译器中删除了 MRC。为什么不直接跳到swift?也许objective-c是历史!
  • @iAnurag 不,您不必使用 ARC。
  • 您确定需要将UIActionSheet 实例保留在属性中吗?通常你没有保存它。

标签: ios objective-c uiactionsheet


【解决方案1】:

手动调用release 是个问题。使用属性的综合设置器时,它会正确释放前一个对象。

您应该将代码更改为:

self.actionSheet = nil;

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

[self.actionSheet release];
_actionSheet = nil;

按照 cmets 中的建议,您应该将代码迁移到 ARC。如果您无法迁移所有代码,您仍然可以迁移大部分代码,只将“有问题”的代码保留在 MRC 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多