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