我有点迷失在对象属性的这个主题上。我的应用程序的想法是在 ViewController 中有许多函数,并通过指向函数(*攻击)的指针将它们存储在类(敌人)中。问题是通过引用此函数来传递对象。
两个类:敌人和玩家(NSObjects)
敌人.h
@property void (*attack)(Class *enemy, Class *player, int); // synthesized
视图控制器.h
@interface ViewController : UIViewController { player *player1; enemy *monster1; } @property enemy *monster1; @property player *player1;
视图控制器.m
void attack1(enemy *attacker,player *target, int x) { target.health = target.health - x; NSLog(@"%i",target.health); } @implementation ViewController @synthesize player1; @synthesize monster1; - (void)viewDidLoad { [super viewDidLoad]; self.player1 = [[player alloc] init]; self.monster1 = [[enemy alloc] init]; player1.health = 100;
以下两个语句不起作用:
monster1.attack = attack1; //Error 1 (yellow) monster1.attack(&monster1,&player1,20); //Error 2 (red)
错误 1说:“不兼容的指针类型分配给 'void (*)(__unsafe_unretained Class*, __unsafe_unretained Class*, int)' from 'void (enemy *_ strong, player * _strong, int)'”
错误 2说:“将 'player *__strong *' 传递给 '__unsafe_unretained Class *' 类型的参数会更改指针的保留/释放属性”(2 次)
我已经尝试将 __unsafe_unretained 放入enemy.h 中的函数或@property 之后的(nonatomic, assign) 中,但似乎没有任何效果。