Objective-C 有没有办法判断对象是否设置为自动释放?

标签 objective-c memory-management autorelease

我正在查看仪器的泄漏报告。我的一些泄露都指向 SBJSON 方法。我很难相信返回的值不是自动释放的,但是在跟踪代码时,它变得非常乏味,包括使用按引用调用返回值。我认为代码跟踪不是看待这个问题的正确方法。

有没有办法判断自动释放池中是否保留了任何对象? (我没有使用 ARC。)

更新

这是 Instruments 向我指出的一些代码:

- (NSString *) processResults:(NSString *) resultsGeoCodeString {

    NSDictionary *resultsGeoCode = [resultsGeoCodeString JSONValue]; // <--- 100%
    ...

我认为“100%”意味着针对此案例报告的所有泄漏都源于此行。

我不释放对象 resultsGeoCode 因为我假设它是自动释放的。

我使用的 SBJSON 套件未使用 ARC。

最佳答案

一般来说,知道一个对象是否在自动释放池中并没有什么帮助。您可以从方法中获取自动释放的对象,也可以获取常量对象或单例或框架出于其自身目的而在内部保留的对象。

首先假设是您的代码而不是 SBJSON 导致了泄漏。 (SBJSON 是一个非常流行且使用良好的库,因此可能不再有任何严重的泄漏。)然后检查您对泄漏对象的处理方式。例如,您是否将其放入一个无论出于何种原因都不会被释放的数组中。您是否在没有有效自动释放池的线程上自动释放它等等。尝试在这里发布您的代码。其他人也许能够发现泄漏。

关于Objective-C 有没有办法判断对象是否设置为自动释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9409435/

相关文章:

objective-c - 关于GNUstep AutoReleasePool的Objective-C未声明的问题

memory - 未收到 addSubview 通知

ios - 从多个 UITableView 选定单元格传递图像数组

objective-c - objective-c : Send email without leaving app

c++ - 关于C++内存分配和删除的问题

r - R中整数向量的大小

C++:编译器如何知道为每个堆栈帧分配多少内存?

ios - 如何在 shopify ios sdk 中打印购物车商品、删除购物车商品?

ios - 分配 : *** error for object 0x1746ea3fe: Invalid pointer

iphone - 如何在iPhone中使用自动释放