2010-02-22 46 views
0

我想改善我的應用程序的性能,我想從我目前使用的動態分配的C數組中的NSMutableArray進行更改。如何動態分配指向Objective-C對象的指針數組?

作爲一個測試,我創建了這個類:

在我的類接口,我有:

MyObject *myObjectArray; 

我在執行,對象已經被初始化之後,我有另一種方法設置陣列:

-(void) createObjectsWithNumberOfObjects:(int)numberOfObjects 
{ 
    MyObject *tempObject = nil; 
    myObjectArray = (MyObject*) malloc(numberOfObjects * sizeof(tempObject)); 
    for(int i = 0; i < numberOfObjects; i++) 
     tempObject = [[MyObject alloc] init]; 
     myObjectArray[i] = (MyObject*) tempObject; // error 
    } 
} 

我得到的錯誤: 不兼容的類型在分配

那我做錯了什麼?

正在使用這樣的對象的動態分配數組?

而且,在我的dealloc方法,我把它安裝到呼叫釋放每一個對象,然後免費(myObjectArray)

回答

2

你需要一些更* S於。聲明您的數組指針:

MyObject **myObjectArray; 

然後初始化它像這樣:

myObjectArray = (MyObject**) malloc(numberOfObjects * sizeof(MyObject *)); 

讓一切在你的代碼別人一樣,它現在是,你應該是不錯的!你爲什麼要改變NSMutableArray?它的靈活性和Cocoa支持比C數組要多得多。

+0

@Big狗狗,如果你有性能問題,我都可以,但保證'NSMutableArray'是不是這個原因... –

+0

沒有性能問題(還)。我很好奇使用標準C數組與NSMutableArray的性能增益。每一幀都會有大約一百個對象被訪問,我認爲會有某種性能改進。 但是,你是正確的,如果發生滯後,它可能會在別的地方。 – codedeziner

+2

如果你真的關心性能,我建議避免不成熟的優化,而是用儀器和鯊魚分析你的代碼。您可能會對實際應用中的瓶頸問題感到驚訝。 –

0

你真的確定你會提高性能嗎? NSMutableArray已經存在了很長一段時間,並且在爲新元素分配更多內存方面可能比現在更智能。

現在,如果你正在創建一個鏈接列表或東西,這可能會產生的東西像在中間插入一個好處......但只是一個普通的數組,你可以添加到,我不知道有多少增益你會看見。

+0

這不是關於內存分配,而是更多關於遍歷每個元素的處理時間。 當具有訪問許多對象60次,我認爲一個標準的C陣列會比使用的NSMutableArray更快。然而,我可能是錯的... – codedeziner