【发布时间】:2012-03-17 13:59:23
【问题描述】:
我有一个 NSOperation,我想用 NSAutoreleasePool 括起来,如下所示:
- (void) start {
opPool = [[NSAutoreleasePool alloc] init];
if (self.isCancelled) {
[self finish];
}
''' more code ...
}
和
- (void) finish {
[opPool release];
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:nil];
... more finish code here ...
self.state = LSOperationStateFinished;
}
opPool 是一个 iVar。
该操作在没有 NSAutoreleasePool 分配和释放的情况下工作。但它会崩溃,如图所示实现。
我在这两个方法中都放了一个断点,看看 [NSThread currentThread] 的描述是什么。两种方法里面都是一样的。
我对 Autorelease Pools 文档的理解是,我应该为与主线程分开的后台线程设置一个。这就是我想要的方式,但显然这不是正确的方式?
我在做一些根本错误的事情吗?我应该怎么做才能满足书面要求?
【问题讨论】:
标签: objective-c memory-leaks nsoperation nsautoreleasepool