在我的控制器类中,我使用NSButton初始化模型类的两个实例(其标题已正确导入控制器类)。该模型非常简单,只有4个成员和一个方法 - attack()。制作一个愚蠢的文字游戏!
- (IBAction)startGame:(id)sender {
Combatant *hero = [[Combatant alloc] init];
Combatant *enemy = [[Combatant alloc] init];
[console insertText:@"You have created a hero! An enemy approaches...\n"];
}
所以现在我有两个这样的物体。或者我呢?因为这个按钮,那个应该让他们战斗的按钮,不知道英雄和敌人是什么,或者他们有一种让他们“战斗”的阶级方法!
- (IBAction)attack:(id)sender{
[hero attack:enemy]; //Use of undeclared identifier, blah blah.
[console insertText:@"You attack the enemy! Woah!\n"];}
如果我在攻击方法中初始化了那些对象,那么我就可以使用它们,所以我认为这与范围有关。但是我不喜欢将模型对象发送到控制器方法的想法,这看起来很愚蠢。
让我道歉:是的,这是关于Cocoa结构的一个愚蠢的高级问题。抱歉。但我想你们其中一个人会确切知道我在做什么并告诉我这样做!
简而言之,在这种情况下,Cocoa的做事方式是什么?提前谢谢。
-Alec
答案 0 :(得分:1)
在方法中声明变量时,它是 local 变量,这意味着它只存在于该方法中。您在函数中声明的变量也是如此。
如果您希望变量存在于类中的所有实例方法中,则需要将其设为 instance 变量,您可以通过在{ … }
部分中声明该变量来实现该变量。 class @interface
。
请注意,您存储在实例变量中的任何对象,实例都应该拥有。这意味着三件事:
dealloc
方法中发布它。有关详细信息,请参阅the Objective-C Programming Language和the Memory Management Programming Guide。