-1

基本的に NSManagedObject をセグエに渡して次のビューをロードする Button があるのは適切ですか?次のビューでは、親 NSManaged オブジェクトの子オブジェクトをロードします。そのコントローラーを破棄すると、NSManagedObject は元のボタンと子によって引き続き保持されます。NSManaged オブジェクトのそのプロパティを上書きするため、次に同じデータをロードしたときに解放されると思います。しかし、これらすべての子オブジェクトを保持するのは悪いことですか、それとも正常ですか?

ある時点でプロパティを nil に設定して、これらの子を手動で解放する必要がありますか?

私が見ているものにもう少し文脈を与えましょう。

楽器

【ブランドページ】の内容

- (NSArray *) pages {


  NSLog(@"%@", [self edetail]);

  if ([self edetail] != nil) {

    NSArray *pgs = [[[self edetail] pages] allObjects];
    return [pgs sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"sort_order" ascending:YES]]];
  }
  return [NSArray array];
}

コアデータから取り出して並べ替えた NSSet である objectA の NSArray があるとします。次に、Array 内の各 objectA を繰り返し処理し、objectA に設定されたプロパティを持つカスタム ボタン クラスを作成します。ボタンがクリックされると、UINavigationController にメッセージを送信して、その ObjectA を使用して ObjectA の特定の子配列/セットをプルし、データをカスタム グリッドに表示するページにセグエします。

ObjectA を渡した UIViewController をポップすると、楽器によると、ObjectA はまだそれらの子オブジェクトを保持しており、ObjectA はまだボタンによって保持されています。これは本当に悪い設計ですか?私の RootViewController がそれらのオブジェクトの NSArray を保持し、インデックスでそれらを呼び出していた場合よりも悪くはないようです。

アプリを使っているうちに、コアデータのすべてのデータを実際に参照してしまうような気がしますが、必要がなくなったにもかかわらず、これらの子が解放されないことが心配です。

4

1 に答える 1

1

管理オブジェクト コンテキストは、管理オブジェクトのメモリ管理を担当します。ひどい文ですね。

管理対象オブジェクトのプロパティを変更したり、新しいプロパティを作成したりする場合、ロールバックするか保存しない限り、それらを MOC に保持することが前提となります。強力なプロパティに管理対象オブジェクトが保持されている場合、リークが発生したり、余分なメモリを実際に使用したりすることはありません。MOC は、メモリ不足になるとオブジェクトを障害に変えます。

ボタンが管理されたオブジェクトを保持しているというあなたの声明は少し心配です。それは良いデザインのようには聞こえません。管理対象オブジェクトをセグエの一部として渡す場合、ボタンはそれへの参照を保持または保持する必要はありません。これはビュー コントローラーの仕事です。

于 2013-01-30T21:25:57.913 に答える