【发布时间】:2010-07-18 19:36:04
【问题描述】:
我有一个不以任何方式依赖 UIKit 的自定义 iPhone 应用程序(它没有链接到 UIKit)。这意味着我没有使用 UIApplication,因此没有调用 UIApplicationMain。
问题是当我创建一个计时器时它永远不会触发。计时器是这样创建的:
[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()”用于挂起主线程,以便应用程序的其余部分可以运行。不过我觉得不对。
编辑:我认为需要配置运行循环。不知怎的……
【问题讨论】:
标签: iphone objective-c nstimer uiapplication cfrunloop