簡體   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