我正在调用一个选择器,我想使用以下
来启动后台进程[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数据库中。该过程本身似乎工作正常,并且分析仪没有显示任何泄漏,但使用分析器并在运行之前在开始时执行基线堆标记,然后在运行之后再次显示大约5mb增益。据我们所知(没有双关语)我们正在performSync过程中正确分配和释放对象。
问题是我在后台运行这个过程,如果我正在为它创建一个AutoreleasePool,并在后台进程结束时释放它,它不应该在它结束时解除与后台进程相关的所有内容?我没有很好地理解为什么所有分配的对象都没有被破坏。
答案 0 :(得分:0)
发布只会在事件循环结束时发生
答案 1 :(得分:0)
每次我们进行记录插入时,我们都缺少一个关闭的数据库语句,这会创建更多连接并导致我们的问题。在这样做之后,我们的基线堆标记为1.22mb,我们的结束堆标记为1.22mb,正如我预期的那样。