我有一个不以任何方式依赖 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() ”用于挂起主线程,以便应用程序的其余部分可以运行。我不认为这是正确的。
编辑:我认为需要配置运行循环。不知何故 ...