-1

在我的应用程序中,经过一些异步操作后,我调用了指向我的ViewController. 有时会发生,这ViewController已经deallocated在该asynch操作之后。我的问题是如何检查是否ViewController已经解除分配?我可以将其作为Id变量访问。简单检查它是否nil不起作用。这是 的正确值ViewController

在此处输入图像描述

但这会导致崩溃:

在此处输入图像描述 我如何检查它是否为空或类似的东西?我是新手ObjectiveC,所以它可能看起来像一个外行问题,但请帮忙。感谢您的任何回答。

4

3 回答 3

1

您可能想要使用弱属性进行调查 - 当被引用的对象被释放时,这些属性应该将自己归零。这个问题的答案应该是有用的:

Objective-C中强弱的区别

于 2013-10-01T12:06:18.460 回答
0

尝试使用DELEGATE或完成块

于 2013-10-01T11:52:57.903 回答
0

我的问题是如何检查 ViewController 是否已被释放?

答案是你不能(但是,见下文)。当对象被释放时,所发生的一切就是它的存储回到堆上以供重用。该记忆的内容没有任何反应。因此,您的 id 指针可以指向原始未释放对象、原始对象但已释放、已重用存储的新对象或只是垃圾。

解决这个问题的旧方法是让视图控制器(委托)拥有执行委托的对象(无论它在做什么异步操作)。当视图控制器被解除分配时,视图控制器将在执行委托的对象上将委托属性(这将是一个分配属性)归零。

使用 ARC,除了委托对象上的委托属性是一个属性之外,它的安排是相同的,这意味着当委托被解除分配时,ARC 将自动将其归零。

于 2013-10-01T12:22:21.427 回答