1

ねえ、私はNSManagedObjectのサブクラスを持っています。 awakeFromInsertとawakeFromFetchでは、とりわけNSTimerを起動する初期化メソッドを呼び出しています。NSManagedObjectサブクラスの悩み

ここで、タイマーを無効にする場所が必要です。しかし、dealloc、finalize、didTurnIntoFault、prepareForDeletion、willTurnIntoFaultは呼び出されません。

ドキュメントによれば、これらのメソッドは、オブジェクトがメモリから消去されるときにすべて呼び出される必要があります。それらのどれもではありませんが、すべてのデータは永続ストアに保存されます。私はなぜ、どのように困惑しているのですか?

オブジェクトのライフサイクル中にこれらのメソッドが呼び出されない原因になることはありますか?

答えて

0

コアデータは、NSManagedObjectの有効期間を制御します。あなたがそれを求めない限り、オブジェクトをメモリからフラッシュすることはありません。 documentationを見ると、二つの方法があるように表示されます。

  1. MOCにrefresh:mergeChanges:を送信すると、オブジェクトが障害に変身させます。
  2. resetをMOCに送信すると、作成したばかりのようにリセットされます。

しかし、上記のいずれの場合でも、明示的なアクションが必要なので、オブジェクトにタイマーを無効にして呼び出すメソッドを追加することもできます。

実際、問題はおそらく設計上の問題であると考えられます。 NSTimerは本質的にユーザーインターフェースイベントです。おそらく、モデルオブジェクト(NSManagedObject)にメッセージを送信してアクションを実行するMVCコントローラによって制御されるはずです。

+0

しかし、アプリケーション終了時にオブジェクトをメモリからフラッシュしないでください。したがって、deallocやdidTurnIntoFaultのようなクリーンアップメソッドは呼び出されるべきです...彼らではありませんか? –

関連する問題