我正在调用一个选择器,我想用它来触发后台进程,如下所示
[self performSelectorInBackground:@selector(startSync) withObject:nil];
例如,假设 startSync 看起来像这样
-(void)startSync {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// expensive background process
Sync *sync = [Sync new];
[sync performSync];
[sync release];
[pool release];
}
真正密集的处理发生在同步对象的“performSync”中。它检索一些 XML,将其解析为数组,然后将其插入 MySQL 数据库。该过程本身似乎运行良好,Analyzer 没有显示任何泄漏,但是在运行前使用分析器并在开始时进行基线堆标记,然后在运行后再次显示大约 5mb 的增益。据我们所知(没有双关语),我们在 performSync 过程中正确分配和释放对象。
问题是我在后台运行这个进程,如果我为它创建一个 AutoreleasePool 并在后台进程结束时释放它,它不应该在后台进程结束时释放与后台进程相关的所有内容吗?我不太了解为什么所有分配的对象都没有被破坏。