如何加快我的iPad应用程序?

时间:2010-06-25 04:08:29

标签: optimization iphone-sdk-3.0 ipad uikit viewdidload

Application Specific Information:
com.oneorangetree.iphoneexample failed to launch in time 
elapsed total CPU time (seconds): 3.500 (user 1.680, system 1.820), 17% CPU 
elapsed application CPU time (seconds): 0.920, 5% CPU

当应用加载时,它会在viewDidLoad中执行大量操作 完成大约需要30秒。我如何将它放在后台线程或其他东西来加速应用程序并防止崩溃(因为加载时间太长)

2 个答案:

答案 0 :(得分:1)

是的,您可以使用后台线程,但更好的方法是在可能的情况下预先计算(或缓存)内容,以便加载时间不会太长。 你的代码做了什么样的事情需要很长时间才能运行?

答案 1 :(得分:1)

我过去曾使用NSOperation / NSOperationQueue进行简单线程化。具体来说,NSInvocationOperation使得旋转一段时间关闭的方法调用变得非常容易,NSOperationQueue实际上为您提供了线程。您正在产生的方法必须是线程安全的,但这并不是特别难。例如,您可以在NSOperationQueue-init方法中创建-viewDidLoad,然后将NSInvocationOperation添加到队列中并将其发送到该队列中。

NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
NSInvocationOperation *lengthyTask = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(processAddresses) object:nil];
[opQueue addOperation:lengthyTask];
[lengthyTask release];

其中一个很酷的东西(特别是在桌面上)是在10.6(和iOS 4)上自动使用Grand Central Dispatch。

虽然线程冗长的任务应该会使您的应用程序响应更快(特别是如果您观察结果并在线程任务中显示结果,可能使用KVO),实现一些缓存将是有益的。每次发布时重新加载地址簿都会非常昂贵,尤其是大多数人不会更改他们的地址簿。您可以将计算数据存储在本地文件或数据库中(Core Data不是很难使用,如果它太慢,您可以直接使用SQLite)。然后在启动时,您可以浏览地址簿,比较上次运行应用程序时每条记录的修改日期,对新修改的记录进行地理编码。