从另一个类获取实例变量?

时间:2013-07-09 07:54:41

标签: objective-c cocos2d-iphone

我知道这是一个基本问题,但它有些不起作用。

我有一个enemy类,其.h个实例变量:

@interface Enemy : CCLayer
{
    CCSprite *enemy1;
    CGSize winSize ;

}

我有另一个类是游戏类,并希望能够访问enemy1。 所以,这个游戏类正在导入enemy.h,并且可以使用它的功能,但是我无法获得它的指针enemy1,我试过没有运气:

   Enemy *enemy=[[Enemy alloc]init];
    [enemy enemy1]//error
    enemy.enemy1 //error

4 个答案:

答案 0 :(得分:4)

我建议您添加只读属性来访问这些实例变量。

@property (nonatomic,assign,readonly) CCSprite *enemy1;
@property (nonatomic,assign,readonly) CGSize winSize;

答案 1 :(得分:2)

由于默认情况下ivars受到保护(仅对子类可见),因此应首先将它们声明为public:

@interface Enemy : CCLayer
{
@public
    CCSprite *enemy1;
    CGSize winSize ;

}

之后,您将能够通过标准的C语法访问ivars,如下所示:enemy->enemy1

但为什么不使用属性?

答案 2 :(得分:2)

您应该使用@property而不是创建ivars。

.h
@property (nonatomic) CCSprite *enemy1;


.m
@synthesize enemy1;

答案 3 :(得分:1)

您需要为enemy1成员定义一个getter。最推荐的方法是将其声明为属性:

@property (nonatomic, readonly)  CCSprite *enemy1;

然后在实现文件中合成它:

@implementation Enemy 

@synthesize enemy1;

@property语法声明了如何处理您的成员(在这种情况下只有读取权限且没有来自课外的写作)

@synthesize语法为您生成getter和setter方法,具体取决于属性的声明方式(并且由于该属性只读取,因此将生成getter)

您可以自己创建一个getter方法,但是合成会为您完成这项工作(包括在必要时正确保留和释放)

您可以找到更多信息here