繁体   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