[英]Assign or retain in cocos2d and objective C
這是我目前的情況:我有一個名為dictKeyArray的NSMutableArray我用@property(nonatomic,retain)NSMutableArray *dictKeyArray
分配了一個屬性@property(nonatomic,retain)NSMutableArray *dictKeyArray
我在實現文件中合成了我的可變數組。
后來,我有一個字典名稱storeDict。 我將字典的所有鍵分配給dictKeyArray,如下所示:
dictKeyArray = [[storeDict allKeys] mutableCopy];
現在我稍后在我的實現文件中使用這個字典。 但是,當它發布它時,我在dealloc
方法中釋放它一次。 使用儀器檢查時,會出現泄漏! 為什么dictKeyArray漏水了? 我應該使用assign
而不是retain
嗎? 我還不清楚究竟有什么不同......謝謝!
你必須發送一個
[[[storeDict allKeys] mutableCopy] autorelease];
只是為了明確這一點: mutableCopy
與alloc
相同,這意味着您聲稱對相關對象擁有所有權。 您必須將retainCount減少一個。
順便說一下:你應該使用你為它編寫的訪問器。 您現在只是將它分配給您的iVar。 如果你想讓你的訪問者工作,你將不得不使用類似的東西
object.dictKeyArray = ...;
一般來說。 或者在這里(如dreamlax所述)
self.dictKeyArray = ...;
因為您指的是代碼所在的特定類的對象。
只有這樣,您才能確保訪問者正確保留您的對象。 否則編寫訪問器代碼根本沒有意義,因為它永遠不會被調用。
請注意:正如Josh在評論中所說,您的代碼應該是有效的(至少從我的角度來看)。 我建議的解決方案並不像您那樣容易出錯,因為您遵守規則(可以在不久的將來免除您的頭痛)。
你應該使用self.dictKeyArray = ...
沒有self.
您正在直接訪問實例變量,繞過屬性的任何內存管理優勢,但是,請記住您擁有mutableCopy
的結果,並且分配給也擁有所有權的屬性將導致雙重所有權,因此使用:
self.dictKeyArray = [[[storeDict allKeys] mutableCopy] autorelease];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.