2010-10-10 140 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

相關問題