Objective-c:知道内存位置是否被释放

我已经为iOS项目实现了一个下载器。 它接受请求,并在下载完成后由代理响应目标。 它是asynchronous的,目标(显然)是一个弱引用,所以当下载完成后,如果目标没有更多的分配,我有一个bad_acces。 我已经解决了在所有请求中search目标并将其设置为零的方法(在使用它的对象被释放时调用)。 这是远离我想要的行为(完全独立于其他对象:如果不再需要下载,它将被caching:它没有方法来停止下载,但只有一个优先级队列)有一个安全的方法来知道是否一个指针仍然指向一个有效的内存地址?

在回答你的问题时,没有一种好的方法来知道指针是否仍然有效(除了僵尸,这不是生产环境解决scheme,只是一个testing环境工具)。 而是担心“我怎么知道这是否是一个悬挂的指针”,你不应该让悬挂指针发生在第一位。

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

剖析你的代码。 使用仪器专门检查内存泄漏。 另外,使用分析来检测可能存在问题的部分。 使用不同的工具,他们在开发中帮助很大。

仅仅通过查看指针所指向的内存位置,就没有安全的方法来知道它是否仍然指向有效的内存(没有写入自己的内存pipe理器)。

为什么不在代码中保留/释放委托? 这将是devise这个的正确方法。 另外,为您的代码的用户提供方法从您的代表列表中删除自己。