2010-07-18 30 views
3

我有一個自定義的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()」用於掛起主線程,以便應用程序的其餘部分可以運行。我不認爲這是正確的。

編輯:我認爲運行循環需要配置。不知何故......

回答

4

你的問題肯定是運行循環相關;詳見NSTimer reference,具體介紹:

定時器與運行循環一起工作。要有效使用定時器,您應該瞭解運行循環的運行方式 - 請參見NSRunLoopThreading Programming Guide。請特別注意,運行循環會保留它們的定時器,因此您可以在將其添加到運行循環後釋放定時器。

+0

那麼,如何得到它的工作?我現在很困惑 – 2010-07-18 19:40:38

+0

你看過線程編程指南嗎?關於「使用運行循環」的部分?我以前沒有創建過自己的Run Loop,但在我看來,這是一個很好的開始! – 2010-07-18 19:47:33

+0

是的,我做到了。它沒有提供任何信息:( – 2010-07-18 20:33:17

3

的解決方案是非常簡單的

NSTimer * timeUpdateTimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:TRUE]; 
[[NSRunLoop mainRunLoop] addTimer:timeUpdateTimer forMode:NSDefaultRunLoopMode]; 

謝謝你的提示粗野青蛙

相關問題