Objective-c:知道内存位置是否已解除分配



我已经为iOS项目实现了一个下载器。它接受请求,并在下载完成后由委托响应目标。它是异步的,目标(显然)是一个弱引用,所以当下载完成时,如果目标不再分配,我有一个bad_acces。我已经解决了添加一个方法(在解除分配使用它的对象时调用)的问题,该方法在所有请求中搜索目标并将其设置为 nil。这与我想要的行为相去甚远(完全独立于其他对象:如果不再请求下载,它将被缓存:它没有停止下载的方法,而只有一个优先级队列)有一种安全的方法来知道指针是否仍然指向有效的内存地址?

在回答您的问题时,没有一种好方法可以知道指针仍然有效(除了僵尸,它不是生产环境解决方案,只是一个测试环境工具)。但是,与其担心"我怎么知道这是否是一个悬空的指针",不如一开始就不应该允许悬空指针发生。

创建下载器时,您可能指定了一个委托。当作为委托的对象要消失时(例如在其dealloc中),它应该告诉下载器将其委托属性设置为nil,从而消除悬空指针。

分析你的代码。使用仪器,特别是检查内存泄漏的工具。此外,使用"分析"检测可能存在问题的部件。使用不同的工具,它们在开发中有很大帮助。

仅通过查看指针指向的内存中的位置,就无法安全地知道它是否仍指向有效内存(无需编写自己的内存管理器)。

为什么不在代码中保留/释放委托? 这将是设计它的正确方法。 此外,为代码用户提供从委托列表中删除自身的方法。

最新更新