3

通知看门狗我没有处于无限循环并且我仍在加载所以不要杀死我的应用程序的正确方法是什么?

我在崩溃日志中收到异常类型:00000020 异常代码:0x8badf00d 并且仅当从 iphone 独立于 xcode 运行应用程序时

花费时间的代码是:

- (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];
 }
}

谢谢。

4

2 回答 2

5

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

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

更新:

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

于 2011-01-17T11:04:26.383 回答
1

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

可能有一种方法可以告诉看门狗不要杀死您的应用程序,但我保证您的加载时间会让您的用户感到沮丧,并且您的应用程序不会获得您想要的外展服务。

于 2011-01-17T11:11:15.763 回答