缓慢的应用程序

问题描述:

是否可以多次调用包含繁重操作的操作?像保存按钮(我保存第一个对象),并希望添加其他人,但该应用程序变得如此缓慢,我无法导航到其他视图缓慢的应用程序

+0

请更具体的与您的问题。向我们展示一些代码。 – Luke

+1

on concurrency:http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091 –

+0

在对修复提出任何建议之前给定,你必须找出*为什么*它很慢。请参阅http://stackoverflow.com/questions/9263783/iphone-time-profile-instrument了解如何配置应用程序以缩小发生的情况。 – BergQuester

您需要确保您没有捆绑主UI你的应用程序的线程。一个可能的简单解决方法是在不同的线程上执行保存操作。下面是如何只是使用大中央调度做了一个例子:iPhone - Grand Central Dispatch main thread

例子:

//notice this saveQueue is a new dispatch queue that's been created. 
dispatch_queue_t saveQueue = dispatch_queue_create("com.mycompany.myqueue", 0); 

dispatch_async(saveQueue, ^{ 
    //this command represents your long running operation 
    doSaveOperation(); 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     //always update your UI on the main thread! 
     [self showCompleteMessage]; 
    });  
}); 
+0

感谢您的回复:什么是showCompleteMessage? –

+0

@OuassimMouyarden,如果您需要在保存完成时提示用户,那么您只需调用一个方法来更新UI即可。告诉用户他们的保存操作已经完成,这是没有必要但很好的做法。 –

+0

现在什么时候会尝试再次调用doSaveOperation,即使它尚未完成我的第一次调用,是否会使用相同的线程? –

您可以随时玩弄大量数据保存相关任务的背景。您可以将与内容有关的东西分发给各种线程(队列),您需要分离您保存的内容,并且如果它阻止了您的UI并使您的应用程序变慢,那么您需要在后台执行这些繁重的操作。

请确保您不要在后台执行任何UI更新操作。尝试阅读关于GCD(它是如何工作的),如何创建背景队列等以及如何玩弄它。我假设你可能正在使用核心数据来保存保存按钮上的内容。尝试阅读关于父/子管理上下文对象。稍微玩一下,将繁重的任务转移到背景中,UI的更新将始终在Main或UI线程上(如果您使用的是分派队列,则可以通过调用get_main_queue()来完成更新)。快乐编码。如果您有特定的代码,那么请告诉我们。我们很乐意提供帮助。 :)

+0

这是我尝试做的,但使得应用程序如此缓慢:dispatch_async(dispatch_get_main_queue(),[self saveMethod:]; });其中saveMethod是包含繁重操作的方法 –

+0

@OuassimMouyarden您需要确保使用除主队列以外的其他队列。否则,就好像您正在尝试在主线程上执行此操作。在我的答案链接中,创建了一个不是主队列的新分派队列。 –

+0

你正在做这件事,你需要创建自己的队列并尝试使用它。这是主队列 - dispatch_get_main_queue()。你需要转移到另一个线程的势头。 –