我正在查看仪器的泄漏报告。我的一些泄露都指向 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/