我正在玩一些基础工具测试(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 -

有帮助吗?

解决方案

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

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

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

其他提示

“无法读取未知加载命令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

欢呼 - 加里 -

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top