指向接口的指针的算术对于该体系结构而言不是恒定大小

arithmetic on pointer to interface which is not a constant size for this architecture

我已经查看了其他几个处理此错误的问题,但所有答案基本上都只是说 "don't do pointer math"。我的代码如下:

MyObject * __strong * array = (MyObject * __strong *)calloc(sizeof(MyObject*), 5);
array[0] += 4;

我想知道为什么我不会做指针数学。根据错误,指向的 MyObject* 值大小不同,但这应该无关紧要,对吧?它只是一个指针数组 - 谁在乎它们指向的东西有多大?

我想我可能只是不了解 ARC 的所有细微差别。

您的变量 "array" 是指向指针的指针,是的,您可以将其视为指针数组。你的对象 "MyObject" 的大小显然不是常量,编译器不允许你做这样的操作是正确的。 不清楚你想用你的变量做什么。

数组[0] += 4;

从数组的第一个元素中获取 "MyObject *" 并希望将其添加到偏移量 4,但要计算此类偏移量,编译器需要知道对象的大小。 可能你想做类似

的事情
    array = array + 4;
or 
    array += 4;