繁体   English   中英

将字符串对象添加到NSMutableArray吗?

[英]Adding string objects to NSMutableArray?

我正在玩一个基础工具测试(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实际上不是字符串文字。 @"Planet_%03d" 字符串文字。 tempString是自动释放的对象,这意味着将在耗尽NSAutoreleasePool时将其释放。 基本上,内存已经被管理,您无需执行任何操作。

规则是: 如果您newalloccopyretain一个对象,则必须release它。 否则,可能已经通过自动释放来管理内存。

另外,您忘记释放 pool 除此之外,它看起来还不错。

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

Snow Leopard(Mac OS X 10.6)发行版中现已提供Xcode 3.2。 安装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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM