3

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

我有一个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

4 回答 4

4

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

@property (nonatomic,assign,readonly) CCSprite *enemy1;
@property (nonatomic,assign,readonly) CGSize winSize;
于 2013-07-09T07:58:42.287 回答
2

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

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

}

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

但是为什么不使用属性呢?

于 2013-07-09T08:00:35.363 回答
2

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

.h
@property (nonatomic) CCSprite *enemy1;


.m
@synthesize enemy1;
于 2013-07-09T08:30:45.573 回答
1

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

@property (nonatomic, readonly)  CCSprite *enemy1;

然后在实现文件中合成:

@implementation Enemy 

@synthesize enemy1;

语法声明了您的@property成员将如何被对待(在这种情况下,只有读取权限并且没有来自类外部的写入)

@synthesize语法会根据属性的声明方式为您生成 getter 和 setter 方法(并且由于属性是只读的,因此只会生成 getter)

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

你可以在这里找到更多信息

于 2013-07-09T07:59:03.433 回答