2010-10-10 67 views
0

在我的控制器类中,我使用NSButton来初始化模型类的两个实例(其头文件已正确导入控制器类)。模型非常简单,只有4个成员和一个方法 - 攻击()。制作一个愚蠢的文本游戏!在控制器类中访问范围外的对象

- (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"]; 
} 

所以现在我有这两个对象坐在那里。或者我?因为这个应该让他们战斗的另一个按钮不知道什么是英雄和敌人,或者他们有一个让他们战斗的阶级方法!我得到,如果我在攻击方法中初始化这些对象,那么我可以使用它们,所以我收集这是与范围。但我不喜欢将模型对象发送给控制器方法的想法,这看起来很愚蠢。

让我道歉:是的,这是关于Cocoa结构的一个愚蠢的高层次问题。抱歉。但我想你们中的一个人会确切地知道我不在做什么,并告诉我这么做!

总之,在这种情况下可可方式的做事方式是什么?提前致谢。

-Alec

回答

1

当在方法声明一个变量,它是一个局部变量,这意味着它仅在该方法中存在。你在函数中声明的变量也是如此。

如果您希望变量在类的所有实例方法存在,则需要通过在类的@interface{ … }节宣布它使它成为实例变量,你怎么做。

请注意,您存储在实例变量中的任何对象都应该拥有该实例。这意味着三两件事:

  1. 你要么需要保留的对象(从而拥有它),或者将其分配给实例变量之前进行副本(然后你会自己)。
  2. 既然你拥有它,你需要在实例的dealloc方法中释放它。
  3. 如果您决定将其替换为其他对象,则需要释放前一个对象(因为您仍然拥有它)并保留或复制新对象(以便拥有它)。

有关更多信息,请参阅the Objective-C Programming Languagethe Memory Management Programming Guide

+0

谢谢彼得!这正是我期待的答案。将它作为控制器的实例变量声明后,我可以在该类中自由使用这些对象。感谢您抽出宝贵的时间。非常感激! – 2010-10-10 19:59:19