Запустите NSRunLoop в командной строке программы Cocoa

Возможно ли инициализировать NSRunLoop без загрузки каких-либо файлов NIB (т. NSApplicationMain() Без вызова NSApplicationMain() )?

Благодарю.

Да; вы можете написать свой собственный основной метод и запустить NSRunLoop без возврата из NSApplicationMain .

Посмотрите на эту ссылку ; этот парень использует NSRunLoop в своем основном методе, но он не загружает файлы NIB, но он должен заставить вас идти с NSRunloops .

Решение заключается в вызове NSApplication вручную. Сначала создайте делегат приложения, чем замените вызов NSApplicationMain () в main.m следующим образом:

 AppDelegate * delegate = [[AppDelegate alloc] init]; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSApplication * application = [NSApplication sharedApplication]; [application setDelegate:delegate]; [NSApp run]; [pool drain]; [delegate release]; 

Делегат будет вызываться, когда он готов, без необходимости использовать нить

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 

В Swift вы можете достичь этого, добавив следующую строку в конец вашего main.swift :

 NSRunLoop.currentRunLoop().run(); // Swift < 3.0 RunLoop.current.run(); // Swift >= 3.0 

Если вы хотите остановить цикл выполнения, вам нужно использовать методы Core Foundation.

 CFRunLoopRun(); // start 

И вы можете остановить это так

 CFRunLoopStop(CFRunLoopGetCurrent()); // stop 
 // Yes. Here is sample code (tested on OS X 10.8.4, command-line). // Using ARC: // $ cc -o timer timer.m -fobjc-arc -framework Foundation // $ ./timer // #include  @interface MyClass : NSObject @property NSTimer *timer; -(id)init; -(void)onTick:(NSTimer *)aTimer; @end @implementation MyClass -(id)init { id newInstance = [super init]; if (newInstance) { NSLog(@"Creating timer..."); _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(onTick:) userInfo:nil repeats:YES]; } return newInstance; } -(void)onTick:(NSTimer *)aTimer { NSLog(@"Tick"); } @end int main() { @autoreleasepool { MyClass *obj = [[MyClass alloc] init]; [[NSRunLoop currentRunLoop] run]; } return 0; } 

Следуйте рекомендациям в документах для [NSRunLoop run]:

 BOOL shouldKeepRunning = YES; // global NSRunLoop *theRL = [NSRunLoop currentRunLoop]; while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]); 

Посмотрите на asynctask.m, который запускает NSRunLoop вручную, чтобы включить использование асинхронных уведомлений waitForDataInBackgroundAndNotify.

http://www.cocoadev.com/index.pl?NSPipe

  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; while(!terminated) { //if (![[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:100000]]) if (![[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { break; } [pool release]; pool = [[NSAutoreleasePool alloc] init]; } [pool release]; в  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; while(!terminated) { //if (![[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:100000]]) if (![[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { break; } [pool release]; pool = [[NSAutoreleasePool alloc] init]; } [pool release]; 
  • Множественное перечисление значений в Obj-C
  • Получить текущего первого ответчика без использования частного API
  • Как добавить UIView над текущим UITableViewController
  • UIPopoverController для iphone не работает?
  • Воспроизведение музыки в фоновом режиме с помощью AVAudioplayer
  • Комплект iPhone Store «Не удается подключиться к iTunes Store»
  • Программный пример UIPickerView?
  • Свойства IBOutlet не обновляются при использовании метода prepareForSegue
  • Класс Foo реализован как в MyApp, так и в MyAppTestCase. Один из двух будет использован. Какой из них не определен
  • В чем разница между «отображаемым именем пакета» и «именем пакета» в информационном plist приложения cocoa
  • С ARC, что лучше: alloc или autorelease инициализаторы?
  • Interesting Posts

    jQuery вычисляет сумму значений во всех текстовых полях

    Как запросить текущий IP-адрес iPhone?

    Тестирование модhive с помощью Spring Security

    Перемещение / выключение устаревшей панели значков слева внизу в GNOME 3.16

    Текстовые библиотеки для iPhone

    Быстрый просмотр PDF-файлов в каталоге

    Когда следует использовать шаблон дизайна посетителя?

    Приложение типа контента / xml; charset = utf-8 ответного сообщения не соответствует типу содержимого привязки (text / xml; charset = utf-8)

    Ошибка Xcode при загрузке в App Store: «Не найдено подходящих записей приложений»

    Есть ли способ реализовать пользовательские функции языка в C #?

    64-битный антивирус

    Образец торта с отменным абстрактным типом не работает с верхними границами

    Как я могу разблокировать документ Microsoft .docx?

    Случайные триггеры активации Windows INSERT; Как остановить его навсегда?

    Где находятся файлы .emacs в Snow Leopard?

    Давайте будем гением компьютера.