[英]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时将其释放。 基本上,内存已经被管理,您无需执行任何操作。
规则是: 如果您new
, alloc
, copy
或retain
一个对象,则必须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.