将一组NSObject指针存储在C数组中

dav*_*ryn 2 c arrays objective-c

我想创建一个NSObject包含几个成员变量的子类:

@interface PointMass : NSObject
{
    CGPoint mCurPosition;
    CGPoint mLastPosition;
    CGPoint mAcceleration;
}

-(id) initWithPosition:(CGPoint*) pos;


#import "PointMass.h"

@implementation PointMass

-(id) initWithPosition:(CGPoint*)pos
{
    mCurPosition = *pos;
    mLastPosition = *pos;
    mAcceleration = ccp(0,0);
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

我想创建一个C风格的数组来在cocos2d类中保存它们:

// mNumPoint declared in interface, I've set it to 100
PointMass *pointMassList;
pointMassList = malloc(sizeof(PointMass*) * mNumPointMass);

for (int = 0; i < mNumPointMass; i++)
{
    CGPoint point = ccp(100,100);
    PointMass *p = [[PointMass alloc] initWithPosition: &point];
    pointMassList[i] = p;
}
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误

Expected method to write array element not found on object of type 'PointMass *'
Run Code Online (Sandbox Code Playgroud)

如果我想在C数组中存储指针,我是否需要告诉编译器更多关于我的PointMass对象?

我基本上试图在iPhone上玩一些粒子数学,而不需要经常从NSArray解包点,如果我不清楚我想在这里实现什么.

如果我以一种倒退的方式解决这个问题,我很乐意纠正 - 自从我写了香草C以来,我已经有一段时间了,而且我有点生疏了!

小智 5

自从我写了香草C以来已经有一段时间了

你应该仍然能够做出一个指针,TO-之间的区别T和指针到指针-TO- T(TPointMass在这种情况下).你想存储一个数组PointMass *,而不是一个数组PointMass(你无论如何都做不到).所以改变声明pointMassList

PointMass **pointMassList;
Run Code Online (Sandbox Code Playgroud)

它会起作用.但是,如果您还在使用Objective-C,为什么不简单地将实例存储到NSArray

  • @davbryn`NSArray`可以像使用现代编译器时那样编入索引. (3认同)