iOS析构崩溃问题

来源:互联网 发布:c语言ansi标准 编辑:程序博客网 时间:2024/06/09 21:49
一、析构与回调问题
对象已经被析构了,对象的成员函数也被销毁了,可是在析构之前回调函数就在进行了,当对象析构完时,回调函数正执行到一半,当访问成员变量的时候,崩溃了。
这该如何解决呢:
1、等待回调执行完毕再析构:
a、启动线程判断是否有回调再执行
b、系统的自动回收机制应该可以:每个回调会将所用到的成员函数retain,回调执行完成后release,当count为0时才销毁。
2、析构之前停止所有回调函数的运行:
a、取消该任务的运行:貌似是不可能的,GCD都不能做到,何况是回调呢
b、回调函数中每次访问成员函数都判断该对象是否被析构,但也不能保证刚判断完,就被析构的情况

二、析构与GCD
对象已经析构了,异步队列却还有任务在运行。GCD没有提供销毁队列的接口,因为给出的接口并不能停止已经加入队列的任务,更不能停止正在执行的任务,所以当队列访问已经被销毁的成员变量,就会导致崩溃问题
解决方案:
1、队列任务运行之前都判断,对象是否被析构。但这样也只能保证析构后,新的任务不被执行,但是正在执行的任务,根本不起作用
2、系统的自动销毁系统应该可以解决,但当我删掉所有销毁代码时,系统的回收却是有问题的,肯定某些地方还是需要销毁的

1 0