0

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 をビュー コントローラーの別のインスタンス変数 (これはプライベート インスタンス変数であり、保持されたプロパティではありません) に割り当てていますが、後でアクセスできないようです。私はそれを保持する必要がありますか?私はちょうどそうして確認しようとしていますが、そもそも保持されていなかったことを本当に理解したいです.

ありがとう :)

4

2 に答える 2

0

If you are not using ARC, you must claim ownership (retain) of anything you intend to use at a later time. And release it when you are done with it (for ivars this would generally be in the class's dealloc implementation). I suggest you use properties to do this as it generally results in less coding. This is due to the fact that you must always release old pointers before assigning new ones:

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

This would be used whenever assigning to an ivar (instance variable) directly. Or you could just use a property:

@property (nonatomic, retain) ManagedPowerObject *managedPowerObject;

The default implementation of the property will handle the release/retain for you and now you can simply use:

self.managedPowerObject = managedPO;

I would suggest reading through Apple's memory management guidelines: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011-SW1

于 2012-06-05T15:23:48.883 に答える
0

だから私は何も欠けていなかった、保持カウントの仮定は正しかった、オブジェクトがコントローラーよりも長生きするので保持は必要なかった.

問題は私の側では本当にばかげていました。実際にはそうではありませんでしたが、オブジェクトが失われたように見える何かを割り当てませんでした。

デバッガーに関しては、同じアドレスを指すはずだったがそうではなかった2つのポインターのように見えます-なぜこれが起こるのかわかりません.xcodeデバッガーにはいくつかの遅延があると思います..

于 2012-06-05T15:43:51.540 に答える