我有一個自定義的iPhone應用程序不以任何方式依賴於UIKit(它沒有鏈接到UIKit)。這意味着我沒有使用UIApplication,因此不會呼叫UIApplicationMain。沒有UIApplication,NSTimer不起作用?
問題是,當我創建一個計時器,它永遠不會觸發。計時器創建這樣的:
[NSTimer timerWithTimeInterval:10 target:self selector:@selector(updateTime) userInfo:nil repeats:TRUE];
我懷疑後,我完成基本的初始化的問題可能是運行循環有關的「的main()」,我這樣做:
NSLog(@"Starting application ...");
applicationInstance = [MyApp alloc];
[applicationInstance setMainLayer:mainLayer];
[NSThread detachNewThreadSelector:@selector(runApplication) toTarget:applicationInstance withObject:nil];
CFRunLoopRun();
我反向工程的UIKit,並注意到UIApplication做了更多的事情,如註冊系統事件等。NSTimer可能依賴於其中的一件事情。我注意到的另一件事是,在UIApplication的委託中,線程與main()中的相同。
我該如何獲得NSTimer才能正常工作?如果它是運行循環相關的,有人可以指出錯誤嗎? 「CFRunLoopRun()」用於掛起主線程,以便應用程序的其餘部分可以運行。我不認爲這是正確的。
編輯:我認爲運行循環需要配置。不知何故......
那麼,如何得到它的工作?我現在很困惑 – 2010-07-18 19:40:38
你看過線程編程指南嗎?關於「使用運行循環」的部分?我以前沒有創建過自己的Run Loop,但在我看來,這是一個很好的開始! – 2010-07-18 19:47:33
是的,我做到了。它沒有提供任何信息:( – 2010-07-18 20:33:17