簡體   English   中英

分配或保留在cocos2d和目標C中

[英]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];

只是為了明確這一點: mutableCopyalloc相同,這意味着您聲稱對相關對象擁有所有權。 您必須將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM