将字符串对象添加到NSMutableArray?

时间:2009-09-14 21:53:14

标签: 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;
}

首先,我通常在将对象添加到数组后释放它,但是我认为我当前正确的是正确的,因为“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_"; 
非常感谢,非常感谢-gary -

3 个答案:

答案 0 :(得分:5)

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

规则是:如果您 new alloc copy retain 一个对象,然后你必须 release 它。否则,内存已经被管理,可能是通过自动释放

此外,您忘记发布pool。除此之外,它看起来很好。

答案 1 :(得分:1)

“无法读取未知加载命令0x80000022”错误的一个可能原因似乎是我在没有同时升级开发人员工具的情况下升级到Snow Leopard。看起来错误可能是由于尝试使用10.5版本到XCode在10.6环境中编译而引起的。我明天会调查一下。

Xcode 3.2现已在Snow Leopard(Mac OS X 10.6)版本中提供。安装Snow Leopard后,通过将其与Xcode Tools磁盘映像分开安装,升级到Xcode 3.2。您可以在以前版本的Xcode上安装它,或者在安装之前将它们移到一边。

PS:当我收到“无法读取未知加载命令0x80000022”错误时,我使用xCode 3.1.2运行OSX 10.6.1

欢呼 - 加里 -

答案 2 :(得分:0)

“加载命令”错误是由于可执行格式已从iPhone OS 3.0更改为iPhone OS 3.1。

http://networkpx.blogspot.com/2009/09/about-lcdyldinfoonly-command.html