[英]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.