在 CLI Cocoa 应用程序中,如何实现事件循环?
Posted
技术标签:
【中文标题】在 CLI Cocoa 应用程序中,如何实现事件循环?【英文标题】:In a CLI Cocoa application, how does one implement a event loop? 【发布时间】:2010-07-30 15:37:17 【问题描述】:我有一个委托类来处理来自 CLLocationManager 的响应并通过 printf() 打印它们。是否可以在 main() 中放入某种类型的繁忙循环,以便程序保持打开状态并保持 CLLocationManager 连接到 Delegate 愉快地处理事件?
#import <Foundation/Foundation.h>
#import "Delegate.h"
#import <CoreLocation/CoreLocation.h>
int main (int argc, const char * argv[])
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Delegate *del = [Delegate alloc];
CLLocationManager *locationManager;
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = del;
[locationManager startUpdatingLocation];
// Something goes here
[pool drain];
return 0;
【问题讨论】:
如果CLLocationManager
在另一个线程上运行它很酷的东西,而你只需要一些东西来保持你的程序活着,你可以使用NSApplicationMain(argc, argv)
或dispatch_main()
(来自<dispatch/dispatch.h>
),在你方便的时候.尽管dispatch_main
永远不会返回,所以[pool drain]
永远不会被调用。
使用 NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; [runLoop 运行];
【参考方案1】:
这就是 NSRunLoop 的用途,CLLocationManager 被明确记录为需要一个(在该页面上搜索“运行循环”),所以这就是您需要做的:运行运行循环。
【讨论】:
嗨彼得,我试过NSRunLoop
但它对我不起作用,我是编写 C++ 应用程序的新手,请你看看 - ***.com/questions/39704702/…以上是关于在 CLI Cocoa 应用程序中,如何实现事件循环?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cocoa 中使用 Bindings+CoreData 实现 iTunes 样式的 Source-List?
Cocoa、FSEvents、kFSEventStreamCreateFlagFileEvents 标志和“重命名”事件