我知道这是一个基本问题,但它有些不起作用。
我有一个enemy
类,其.h
个实例变量:
@interface Enemy : CCLayer
{
CCSprite *enemy1;
CGSize winSize ;
}
我有另一个类是游戏类,并希望能够访问enemy1
。
所以,这个游戏类正在导入enemy.h
,并且可以使用它的功能,但是我无法获得它的指针enemy1
,我试过没有运气:
Enemy *enemy=[[Enemy alloc]init];
[enemy enemy1]//error
enemy.enemy1 //error
答案 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