在 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()(来自&lt;dispatch/dispatch.h&gt;),在你方便的时候.尽管dispatch_main 永远不会返回,所以[pool drain] 永远不会被调用。 使用 NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; [runLoop 运行]; 【参考方案1】:

这就是 NSRunLoop 的用途,CLLocationManager 被明确记录为需要一个(在该页面上搜索“运行循环”),所以这就是您需要做的:运行运行循环。

【讨论】:

嗨彼得,我试过 NSRunLoop 但它对我不起作用,我是编写 C++ 应用程序的新手,请你看看 - ***.com/questions/39704702/…

以上是关于在 CLI Cocoa 应用程序中,如何实现事件循环?的主要内容,如果未能解决你的问题,请参考以下文章

在 Cocoa 中注册全局文件拖动事件

向 Cocoa 应用程序的主事件循环发布消息?

Cocoa Touch:iPad 表格网格布局

Mac Mountain Lion从CLI应用程序发送通知

如何在 Cocoa 中使用 Bindings+CoreData 实现 iTunes 样式的 Source-List?

Cocoa、FSEvents、kFSEventStreamCreateFlagFileEvents 标志和“重命名”事件