我有一个类是 NSOperation 的子类(实际上是 ASIHTTPRequest 的子类,它是 NSOperation 的子类)。
Instruments 报告 __NSOperationInternal 内存泄漏,调用堆栈如下:
0 libSystem.B.dylib calloc
1 libobjc.A.dylib _internal_class_createInstanceFromZone
2 libobjc.A.dylib class_createInstance
3 CoreFoundation +[NSObject(NSObject) allocWithZone:]
4 CoreFoundation +[NSObject(NSObject) alloc]
5 CoreFoundation +[NSObject(NSObject) new]
6 Foundation -[NSOperation init]
7 MyApp -[JSONRequest init] JSONRequest.m:26
JSONRequest 的 init 和 dealloc 看起来像这样:
- (id)init
{
if ((self = [super init]))
{
[self setDidFinishSelector:@selector(JSONFinished:)];
[self setDidFailSelector:@selector(JSONLoadFailed:)];
}
return self;
}
- (void)dealloc {
[super setDelegate:nil];
[super dealloc];
}
我在我的代码中看不到任何可能导致此问题的错误。这可能是错误的泄漏,还是有人知道代码可能有什么问题? (是否有任何准则可以判断仪器报告的泄漏是否是错误的?)
这是唯一被报告的泄漏(即对象的所有属性都没有被泄漏)但是在我的应用程序运行期间多次报告此泄漏。
最佳答案
我最终设法弄清了这个问题。
事实证明,我在某些情况下不小心调用了 [super init] 两次,显然导致 [NSOperation init] 分配的对象被泄露。
关于objective-c - __NSOperationInstruments 报告内部泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967538/