我有一个问题。我的案例研究是我有两个大的SQLite数据库,我想使用线程(同时意味着2个进程)。它运作得好吗?我写了以下代码:
NSAutoreleasePool *dbPool;
dbPool = [[NSAutoreleasePool alloc] init];
/* All Database work is performed here */
[dbPool release];
请指导我。我这样做是否正确?我应该使用游泳池来排水还是释放?
这样就是使用并发进程,这意味着它与多任务处理的行为相同?
提前致谢!
答案 0 :(得分:1)
关于你关于游泳池释放/排水的问题,推荐是排水消息。
sqlite数据库是什么意思?你怎么访问它?如果您通过CoreData访问它,您将继续关注您的记忆:
有更多规则,但这些是基本规则。
多任务处理意味着您可以一次运行更多应用程序。多线程(=您的情况)意味着您的应用程序确实使用更多线程来完成其任务。
答案 1 :(得分:0)
用户界面或其他繁重的对象管理工作的常用方法是像你一样包围你的代码,但你应该使用drain
:
NSAutoreleasePool *dbPool = [[NSAutoreleasePool alloc] init];
// do your work
[dbPool drain];
NSAutoreleasePool
上有很多详细信息here和之前的Stack Overflow回复here。基本上,您在池中进行的工作(如果设置为autorelease
)将在池耗尽后释放。在处理生成自动释放实例的某些类时,这可以提高性能。如果你想要完全和立即控制,你可以release
一旦你不再需要你正在使用的每个对象,并完全放弃池。
至于你的多线程问题,我不确定我是否理解你所问的内容,但即使在后台线程中使用池也是一种可靠的方法。这假设您在线程中使用的对象不会以某种方式在另一个中使用(因为您可能会意外释放)。