Требуется ли для программы командной строки Objective-C пул NSAutoreleasePool?

Я изучаю Objective-C, играя с некоторым кодом в простой программе командной строки, вот мой код:

#import <Foundation/Foundation.h>
#import <stdio.h>

int main(int argc, char** argv)
{
    NSString *hello = @"hello world";

    printf("msg: %s\n", [hello UTF8String]);

    return 0;
}

I скомпилируйте и запустите его следующим образом:

gcc test.m -o test -ObjC -framework Foundation
./test

и получите следующий результат:

2011-06-08 20:35:21.178 test[10220:903] *** __NSAutoreleaseNoPool(): Object 
0x10010c8b0 of class NSCFData autoreleased with no pool in place - just leaking
msg: hello world

Итак, я вижу, что ошибка относится к тому факту, что нет NSAutoreleasePool, и когда я добавляю его, ошибка исчезает:

#import <Foundation/Foundation.h>
#import <stdio.h>

int main(int argc, char** argv)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSString *hello = @"hello world";

    printf("msg: %s\n", [hello UTF8String]);

    [pool release];

    return 0;
}

Итак, прав ли я, предполагая, что приложение командной строки, которое использует такие объекты, как NSString и т. Д. И компилируется с Foundation, требует, чтобы пул автоматического выпуска создавался вручную? И является ли мой приведенный выше пример лучшим способом сделать это?

Примечание. также пытался [привет, выпуск]; без NSAutoreleasePool, чтобы посмотреть, могу ли я вручную очистить память без использования пула, но получил ту же проблему.

8
задан Martin 8 June 2011 в 19:46
поделиться