将字符串对象添加到NSMutableArray?
-
07-07-2019 - |
题
我正在玩一些基础工具测试(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