2010-03-05 55 views
1

我是一個目標C新手,我敢肯定這是一個簡單的問題,但我無法弄清楚這一點: 我有一個類聲明瞭一個實例變量myDeck,它是我創建的一個自定義類的一部分甲板。現在我有這個在我的代碼:如何正確初始化一個變量對象是一個對象?

在@interface:

Deck *myDeck; 

在我的init方法:

Deck *ourDeck = [[Deck alloc]init]; 
myDeck = ourDeck; 

因此,這似乎創造了myDeck就好了,我可以堅持它的價值觀並運行它的方法一段時間,但我遇到了一個地方,它不再存在,當我嘗試使用它時出現EXC_BAD_ACCESS錯誤。

我曾嘗試加入

[myDeck retain]; 

無濟於事,但仍無法在同一個點。我真的不知道我應該如何分配和啓動這個,我有一種感覺我失去了一些東西,任何人?

回答

1

你在那裏做的一切似乎是正確的;除非我認爲您的第一個示例中可能存在拼寫錯誤 - 實例變量名爲myDeck,而不是deck,對吧?如果您的物體正在消失,那是因爲您多次撥打releaseautorelease。 Cocoa中的內存管理非常簡單。請查看documentation瞭解您所需的所有信息。

+0

糟糕,是的,這是一個錯字(在我的代碼中,var被命名爲deck,爲了清晰起見,我在本文中進行了修改)。 我想你是對的,某些東西一定會釋放它太多,但我不明白是什麼,但我根本不會調用retain或autorelease,我想我的程序正在發佈它。我試着在我發佈的代碼之後粘貼了幾十個[myDeck retain]聲明,但這對我沒有幫助。我想這是我找到它時看起來很明顯的東西。 – Cocorico 2010-03-05 07:25:00

+0

@Cocorico,你確定你保持對象的好指針嗎?你也可以通過訪問壞指針來獲得'EXC_BAD_ACCESS'。 – 2010-03-05 07:29:32

+0

我不知道,那可能是我在想我的問題。我並不是100%明白指針是好還是壞。就像在我的代碼中,當我使用myDeck對象時,我基本上只是在做這樣的事情: [myDeck shuffleDeck]; ... [myDeck printOutCards]; 如果這是有道理的。有趣的是,我剛剛在那裏輸入的printOutCards命令在init方法和另一個方法中工作,但不是在出現錯誤的方法中。 – Cocorico 2010-03-05 07:38:08