objective-c - 访问 Controller 类范围之外的对象

标签 objective-c cocoa

在我的 Controller 类中,我使用 NSButton 初始化模型类的两个实例(其 header 已正确导入到 Controller 类中)。该模型非常简单,只有 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"];}

我知道,如果我在攻击方法中初始化了这些对象,那么我就可以使用它们,所以我认为这与范围有关。但我不喜欢将模型对象发送到 Controller 方法的想法,这看起来很愚蠢。

让我道歉:是的,这是一个关于 Cocoa 结构的愚蠢的、高级的问题。对不起。但我想你们中的一个人会确切地知道我没有做什么,并告诉我去做!

简而言之,在这种情况下 Cocoa 的做事方式是什么?提前致谢。

-亚历克

最佳答案

当您在方法中声明变量时,它是一个本地变量,这意味着它仅存在于该方法中。对于在函数中声明的变量也是如此。

如果您希望该变量存在于类中的所有实例方法中,则需要将其设为实例变量,方法是在 { … } 中声明它。类(class)的@interface部分.

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

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

参见the Objective-C Programming Languagethe Memory Management Programming Guide了解更多信息。

关于objective-c - 访问 Controller 类范围之外的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3901705/

相关文章:

ios - 调用 viewDidLoad 时,单元格数据不会显示在 TableView 中

ios - 如何找到 iphone 相机照片的大小以及如何调整它的大小?

cocoa - 隐藏 NSScrollView 的滚动条

objective-c - Cocoa App 中的多重授权

objective-c - 可调整大小的自定义 NSPanel

objective-c - 无论如何要在 objective-c 中快速将单词分解为字符数组?

iOS 触摸阻塞问题

ios - 魔法记录/核心数据 : Saving Many Objects (~250K) Without Performance/Time Troubles?

objective-c - 在自动布局中,如何在删除自定义 View 后使 NSWindow 调整回最小尺寸?

objective-c - NSBundle,可以用来保存项目文档吗?