fuz*_*oat 5 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;
}
Run Code Online (Sandbox Code Playgroud)
首先,我通常在将对象添加到数组后释放它,但我是否正确地认为我当前所拥有的是正确的,因为"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_";
Run Code Online (Sandbox Code Playgroud)
非常感谢,非常感谢-gary-
tempString实际上并不是字符串文字.@"Planet_%03d" 是一个字符串文字.tempString是一个自动释放的对象,这意味着它将在NSAutoreleasePool耗尽时释放.基本上,内存已经被管理,你不需要做任何事情.
规则是:如果new,alloc,copy或者retain一个对象,那么你就要release它.否则,内存已经被管理,可能是通过自动释放.
而且,你忘了发布pool.除此之外,它看起来很好.
| 归档时间: |
|
| 查看次数: |
18475 次 |
| 最近记录: |