我已经为iOS项目实现了下载程序。它接受请求,并在下载完成后,由代表响应目标。它是异步的,目标(显然)是一个弱引用,因此当下载完成时,如果目标不再分配,我有一个bad_acces。 我已经解决了添加一个方法(当一个使用它的对象被解除分配时调用),它在所有请求中搜索目标并将其设置为nil。 这远离我想要的行为(完全独立于其他对象:如果不再请求下载,它将被缓存:它没有方法可以停止下载但只有优先级队列) 有一种安全的方法可以知道指针是否仍指向有效的内存地址吗?
答案 0 :(得分:4)
在回答你的问题时,没有一种很好的方法可以知道指针仍然有效(僵尸除外,它不是生产环境解决方案,只是一种测试环境工具)。但是,如果担心“我怎么知道这是否是一个悬垂的指针”,你应该不允许悬空指针首先出现。
创建下载程序时,您可能会指定一个委托。当作为委托的对象将消失时(例如在其dealloc
中),它应该告诉下载程序将其委托属性设置为nil
,从而消除悬空指针。
答案 1 :(得分:1)
描述您的代码。使用仪器专门检查内存泄漏。此外,使用Analyze检测可能存在问题的部件。使用不同的工具,它们对开发有很大的帮助。
答案 2 :(得分:-1)
只需查看指针所指向的内存中的位置,就没有安全的方法可以知道它是否仍然指向有效的内存(没有编写自己的内存管理器)。
为什么不在代码中保留/释放代理?这将是设计这个的正确方法。此外,为代码的用户提供从代理列表中删除自己的方法。