0

在一個關係屬性的對象具有一個NSManagedObject亞類:保持其加入到一個NSManagedObject

@interface ManagedActivityAmount : NSManagedObject 

    @property (nonatomic, retain) NSNumber * distance; 
    @property (nonatomic, retain) NSNumber * duration; 
    @property (nonatomic, retain) NSSet *sets; 

    @end 

    @interface ManagedActivityAmount (CoreDataGeneratedAccessors) 

    - (void)addSetsObject:(ManagedPowerSet *)value; 
    - (void)removeSetsObject:(ManagedPowerSet *)value; 
    - (void)addSets:(NSSet *)values; 
    - (void)removeSets:(NSSet *)values; 

    @end 

我在保持於我使用添加到該組關係的對象的引用遇到一個問題:

- (void)addSetsObject:(ManagedPowerSet *)value; 

的ManagedPowerSet對象被成功添加到ManagedActivityAmount設置屬性,我假設它的保留數爲1,由於本(實際的對象是之前自動釋放,以便將其添加到之前保留計數爲0該集)。我對麼?我錯過了什麼嗎?

我分配到ManagedPowerObject視圖控制器的另一實例變量(這是一個私有的實例變量,而不是保留的財產),但我似乎無法在稍後訪問它。我應該保留它嗎?我即將這樣做,並檢查,但我真的想了解我們它並沒有保留在第一位。

謝謝:)

回答

0

所以我沒有錯過任何東西,保留計數的假設是正確的,因爲對象超過控制器,所以不需要保留,如果它是一個它應該分配的屬性..

的問題是在我的部分很愚蠢,我不分配別的東西,使得它看起來就像物體丟了,但實際上它不是。

爲調試和什麼好像是本應該指向同一個地址,但不是兩個指針 - 我不知道爲什麼會這樣,我猜Xcode調試有一定的延遲..

0

如果你不使用ARC,必須要求的任何事情,你打算在以後的時間使用所有權(保留)。當你完成它時釋放它(對於ivars,這通常在類的dealloc實現中)。我建議你使用屬性來做到這一點,因爲它通常會減少編碼。這是由於這樣的事實,你必須始終分配新的前釋放舊指針:

[_managedPowerObject release]; 
_managedPowerObject = [managedPO retain]; 

這將每當分配給伊娃(實例變量)可以直接使用。或者你可以只使用一個屬性:

@property (nonatomic, retain) ManagedPowerObject *managedPowerObject; 

屬性的默認實現將處理髮布/留住你,現在你可以簡單地使用:

self.managedPowerObject = managedPO; 

我會建議通過蘋果的存儲器讀取管理準則: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011-SW1

+0

THX#sc0rp10n的答案,但它並沒有真正幫助我。我試圖保持沒有幫助,在實際任務中有些錯誤。我正在看debuger,我可以看到兩個指針的內存地址仍然不同,我錯過了其他的東西.. –

相關問題