我關於實施紙牌類的工作,我已經創建了下面的方法:如何管理內存自動釋放對象
+ (id)cardWithCard:(Card *)newCard
{
Card *card = [[[Card alloc] initWithCard:newCard] autorelease];
return card;
}
我使用自動釋放方法,在這裏引起否則產品 - >分析警告我一下潛在的泄漏。一切工作正常,直到變量myCard(它被分配更早),像這樣分配一個新值:myCard = [Card cardWithCard:newCard]
作爲參數發送到不同的方法。原來在那裏被釋放,我的應用程序崩潰。 我應該如何解決這個問題?獲取autorelease方法,儘管分析的警告?
非常感謝您的詳細解釋。我在實踐中得到的是:當我做這些@屬性(非原子,保留)卡* myCard;沒有改變。 myCard仍然在我傳遞給它的方法中釋放。這樣做 - myCard = [[Card cardWithCard:newCard] retain];已經解決了問題,應用程序不再崩潰,但現在我想知道如果我有泄漏(分析說,我不),因爲我保留我的卡在一個循環,但只發布一次。你怎麼看?我現在有泄漏嗎? –
@AndreyChernukha不要這樣做!你正在繞過你的'@屬性'你需要做'self.myCard = something',所以屬性被調用並且做它的魔術。如果你做'myCard = something',你正在繞過你的@屬性,這就是爲什麼你需要額外的'retain'。如果你總是繞過財產不要麻煩宣佈他們,但這不是一個好的方式去,它更容易出錯 –
再次謝謝你 –