我正在运行大量NSOperation
任务,而我的应用程序正在使用大量内存。虽然它应该使用相当多,但它使用的数量超出了应有的程度,而且我正在从Instruments中思考,这是因为NSOperation
对象没有被完全解除分配。我的NSOperation
子类的代码是这样的:
- (id)initFromNode:(BKObject *)sender withNumber:(NSNumber *)number; {
self = [super init];
if (self) {
_number = [number retain];
_sender = [sender retain];
}
return self;
}
- (void)main {
[_sender go:_number];
}
- (void)dealloc {
[_number release];
_number = nil;
[_sender release];
_sender = nil;
[super dealloc];
}
我的怀疑是这样的,因为在Instruments中,当我使用Allocations实用程序时,它显示了我的_NSOperationInternal
以及NSOperation
的子类的大量数据,但Live Bytes数字始终是等于总字节数。我还检查了Leaks实用程序,它从未发现任何内存泄漏。在将任何操作对象添加到队列后,我会小心释放它们。
如果它真的完成了,我还会在完成块中测试它,并且我可以确认它们中至少有一些是这样做的。确认所有这些工作会更多,而且仪器中的实时数据会有所下降,即使只有10%的数据正在完成。
我很茫然。如果我对我正在做的事情有任何理解,或者更多代码会有所帮助,请告诉我。你知道可能会发生什么事情,这会占用更多的内存吗?
答案 0 :(得分:0)
要调试此操作,请尝试查看是否甚至调用了-dealloc
。最简单的方法是使用NSLog
,正确的方法是断点。
我的猜测是:
NSOperations
。NSOperation
中的某些对象不会被释放,请尝试在主方法周围添加自动释放池。