在我的应用程序中,经过一些异步操作后,我正在调用指向我ViewController
中方法的选择器。
有时它会发生,ViewController
在deallocated
操作之后已经asynch
。
我的问题是如何检查ViewController
是否已经解除分配?
我可以将其作为Id
变量访问。简单检查它是否nil
不起作用。
这是ViewController
:
但这会导致崩溃:
我怎样才能检查它是否为空或类似?我是
ObjectiveC
的新手,所以看起来像是一个外行问题,但请帮助。谢谢你的回答。
答案 0 :(得分:1)
您可能想要使用弱属性进行调查 - 当被引用的对象被释放时,这些属性应该自行解决。这个问题的答案应该是有用的:
答案 1 :(得分:0)
尝试使用DELEGATE或完成块
答案 2 :(得分:0)
我的问题是如何检查ViewController是否已经解除分配?
答案是你不能(但是,见下文)。当对象被释放时,所发生的一切就是它的存储在堆上返回以便重用。内存的内容没有任何变化。所以你的id指针可以指向原始的非释放对象,原始对象但是已经解除分配,一个新的对象已经重用了存储或只是垃圾。
解决这个问题的方法是让视图控制器(委托)拥有执行委托的对象(不管它是在进行异步操作)。在视图控制器被取消分配时,视图控制器将对执行委托的对象nil委托属性(这将是一个assign属性)。
使用ARC时,除了执行委托的对象上的委托属性是弱属性之外,它是相同的排列,这意味着当委托被取消分配时,ARC将自动将其置零。