Iphone,我怎样才能避免看门狗杀死我的应用程序需要很长时间才能启动?

时间:2011-01-17 10:51:27

标签: iphone watchdog

通知看门狗的正确方法是什么,我不是在无限循环中,而且我还在加载,所以不要杀死我的应用程序?

我正在收到我的崩溃日志 例外类型:00000020 例外代码:0x8badf00d 并且仅当从iphone独立于iphone运行应用程序

代码占用时间是:

- (void)viewDidLoad {
    [super viewDidLoad];
 Reachability* reachability = [Reachability sharedReachability];
 [reachability setHostName:@"www.apps2you.com"];    // set your host name here
 NetworkStatus remoteHostStatus = [reachability remoteHostStatus];

 if (remoteHostStatus == ReachableViaWiFiNetwork||remoteHostStatus == ReachableViaCarrierDataNetwork )
 {
  //getting the xml file and then getting the ad images online to display as splah ads.
 }
 else {
//or launch the main interface if there's no connectivity.
  [self DisplayTabbar];
 }
}

感谢。

2 个答案:

答案 0 :(得分:5)

如果你有一些需要很长时间的初始化,那么最好在一个新线程中运行它(通过performSelectorInBackground:withObject:)。然后,您的UI将以某种“锁定”状态启动。创建一个“解锁”UI的方法。作为后台方法的最后一项操作,请通过performSelectorOnMainThread:withObject:waitUntilDone:运行该解锁方法。

重要的是不要阻止主线程,以便运行循环可以响应iOS事件。这就是为什么你应该避免sleep或其他阻塞的东西。不过,可以阻止另一个线程。此外,适应基于事件的编程方法有很大帮助。

<强>更新

如今,最好使用dispatch_async代替performSelectorInBackground:withObject:。您仍然应该在NSAutoreleasePool块内创建一个新的dispatch_async以避免内存泄漏。

答案 1 :(得分:1)

我认为如果看门狗正在杀死你的应用程序,那么加载需要的时间太长而你的用户不会等待它。看看一些内存管理技术,您可能需要更好地构建项目。

可能有一种方法可以告诉看门狗不要杀死你的应用,但我保证你的加载时间会让你的用户感到沮丧,而且你的应用无法获得你想要的超出范围。