2012-10-29 21 views
0

我使用這行代碼要經過一個數組混淆了長度爲NSArray的與obj中-C

for (int i = 0; i < [[GameP objectForKey:@"groundMap"] length]; i += 5) { 

從AS3背景的人使用,我認爲「長度」可以給我的長的數組/對象,但我剛剛發現似乎做同樣的事情「計數」,我找不到任何有關使用「長度」的信息,但它似乎工作。

誰能告訴我..

  1. 什麼是「長」,以及如何/爲什麼它在該行的工作?
  2. 計數和長度有什麼區別?
  3. 哪個更好用?

感謝您的任何建議。

+0

你能否澄清一下'[GameP objectForKey:@「groundMap」]'返回的內容? –

回答

3

假設GameP是字典,對objectForKey:的調用返回id類型的對象。所以你試圖在id上調用length方法。這會很好地編譯,但是在運行時它可能是錯誤的,假設「groundMap」對象是一個數組。一個數組只有一個count方法,沒有length方法。

您也正在訪問字典中的每個循環迭代的對象。你真的應該這樣寫你的代碼:

NSArray *groundMap = [GameP objectForKey:@"groundMap"]; 
NSUInteger count = groundMap.count; 
for (int i = 0; i < count ; i += 5) { 
} 

這是更容易閱讀和編譯器可以做更好的錯誤檢查。它也更有效率。

0

起初你必須知道你的字典對象的類GameP。 如果那NSArray你不得不使用count這裏是沒有辦法使用另一種方法。

您可以在NSSString類中找到length方法。