将字符串对象添加到NSMutableArray?

fuz*_*oat 5 objective-c foundation

我正在玩一个基础工具测试(Objective-C),我有一些问题......

#import <Foundation/Foundation.h>

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

    int planetLoop;
    NSString *tempString;
    NSMutableArray *planetArray = [[NSMutableArray alloc] init];

    NSLog(@"STRING ARRAY ... Start");
    for(planetLoop=0; planetLoop<10; planetLoop++) {
        tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
        NSLog(@"Planet_%03d", planetLoop+1);
        [planetArray addObject:tempString];
    }

    [planetArray release];
    [pool drain];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

首先,我通常在将对象添加到数组后释放它,但我是否正确地认为我当前所拥有的是正确的,因为"tempString"是一个字符串文字,因此不需要分配或释放?

其次,当我运行它(执行之前)时,我得到以下错误"无法读取未知的加载命令0x80000022"如果这是我的代码的问题?从搜索谷歌看起来它可能是xCode 3.1.2中的一个错误,任何人有任何想法?

最后我做错了什么,想法是用10个字符串"Planet_001"填充一个数组到"Planet_010"

编辑:啊,我明白了,因为"= [NSString"位即

// Autoreleased object
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
// String literal
tempString = @"Planet_"; 
Run Code Online (Sandbox Code Playgroud)

非常感谢,非常感谢-gary-

Tom*_*ing 5

tempString实际上并不是字符串文字.@"Planet_%03d" 一个字符串文字.tempString是一个自动释放的对象,这意味着它将在NSAutoreleasePool耗尽时释放.基本上,内存已经被管理,你不需要做任何事情.

规则是:如果new,alloc,copy或者retain一个对象,那么你就要release它.否则,内存已经被管理,可能是通过自动释放.

而且,你忘了发布pool.除此之外,它看起来很好.