簡體   English   中英

分配數組引用,不兼容的類型?

[英]Assigning array references, incompatible types?

我有一個名為ItemComponent的自定義類。 另一個類具有一個稱為subComponents的數組。 這是該類的屬性:

ItemComponent *subComponents[0];

最初,將其設置為0,因為並非所有對象都具有子組件。

在實現中,我有一個向屬性添加ItemComponent的方法。 該項目被傳入,並且分配的編碼如下(在必要的檢查和切換之后):

ItemComponent *tempArray[1];
tempArray[0] = item;
subComponents = tempArray;

我在最后一行收到錯誤:“分配中的類型不兼容”。

它們都是數組的指針,那有什么用呢?

謝謝!

首先,正如我已經在評論中寫道的那樣,我認為您出汗太多了。 我想我們正在談論的是可以包含某些組件的游戲對象。 在這種情況下,將組件保留在NSArray是完全可以承受的。 該代碼將更易於使用,並且速度差異很小。

如果您想無后顧之憂,請設置一個小型測試,該測試將對某些NSMutableArrays數千次迭代,甚至可能更改其中的一些。 然后測量所需的時間:

double start = CFAbsoluteTimeGetCurrent();
// now iterate over the arrays, send some messages, change contents
double end = CFAbsoluteTimeGetCurrent();
double diff = end-start; // in seconds
NSAssert(diff < 0.005, @"I’ll be damned.");

(根據您要執行的操作,0.005部分可能太陡了,但我想您已經明白了。要構建一個完整的幀,50 fps≈1/50 s = 0.02 s = 20 ms。如果整個Objective- C開銷花費了10毫秒,其余時間大約還有20毫秒,並保持了30 fps的不錯幀率。)

在某些情況下,您可能想使用純C數組,例如,當您編寫粒子引擎並且數組中有成千上萬個項目會改變每個循環時。 在這種情況下,您可以簡單地使用一個指針:

ItemComponent *components;
int compMax;
// …
compMax = 1000;
components = calloc(compMax, sizeof(ItemComponent));
NSAssert(components != NULL, @"Out of memory for components.");
components[0] = …;
components[1] = …;
// …
free(components);

我對第一點百分百肯定。 我對第二種方法不太確定,也許有一種更安全的方法可以做到,但是我會這樣寫。

您使用C數組而不是NSMutableArrays是否有原因?

嘗試此操作以查看是否有所不同。

ItemComponent *subComponents[];

按照定義的方式,subComponents數組實際上將其(零)項存儲在其他類變量中。 您無法將其重置為指向其他位置。 為此,您需要使其成為一個指向ItemComponent的指針,而不是一個零長度的ItemComponents數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM