通知看门狗的正确方法是什么,我不是在无限循环中,而且我还在加载,所以不要杀死我的应用程序?
我正在收到我的崩溃日志 例外类型: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];
}
}
感谢。
答案 0 :(得分:5)
如果你有一些需要很长时间的初始化,那么最好在一个新线程中运行它(通过performSelectorInBackground:withObject:
)。然后,您的UI将以某种“锁定”状态启动。创建一个“解锁”UI的方法。作为后台方法的最后一项操作,请通过performSelectorOnMainThread:withObject:waitUntilDone:
运行该解锁方法。
重要的是不要阻止主线程,以便运行循环可以响应iOS事件。这就是为什么你应该避免sleep
或其他阻塞的东西。不过,可以阻止另一个线程。此外,适应基于事件的编程方法有很大帮助。
<强>更新强>
如今,最好使用dispatch_async
代替performSelectorInBackground:withObject:
。您仍然应该在NSAutoreleasePool
块内创建一个新的dispatch_async
以避免内存泄漏。
答案 1 :(得分:1)
我认为如果看门狗正在杀死你的应用程序,那么加载需要的时间太长而你的用户不会等待它。看看一些内存管理技术,您可能需要更好地构建项目。
可能有一种方法可以告诉看门狗不要杀死你的应用,但我保证你的加载时间会让你的用户感到沮丧,而且你的应用无法获得你想要的超出范围。