1

私は、VIEW-CONTROL-MODEL構造に委任を広範囲に使用します。通常、CONTROL&MODELオブジェクトはアプリの実行中に保持されるため、問題はほとんど発生しません。

ただし、多くの場合、のインスタンスであるVIEWオブジェクトは、UIViewController何度も割り当てられ、解放されます。

nil動的インスタンスが割り当て解除されているときに、動的インスタンスが割り当てられているデリゲートオブジェクトに設定することはUIViewController、EXC_BAD_ACCESSエラーを回避する方法を知っている1つの方法です。

ただし、私がいつも使用している場合でも:

if ([delegate respondsToSelector:@selector(communityModel:finishedDeletingComment:)]) {
    [delegate communityModel:self finishedDeletingComment:succeeded];
}

エラーを防ぐのに最適ではありません。異なるVIEWオブジェクトがCONTROLオブジェクトの1つまたは限られた数のデリゲートを共有している場合、デリゲートが意図せずに別のデリゲートに置き換えられ、EXC_BAD_ACCESSが発生する傾向があります。

デリゲートメソッドを呼び出すときに実際に利用できるかどうかを知るために、デリゲートを管理するためのより良い方法はありますか?

デリゲートのプロパティを設定する通常の方法を変更する必要があるかどうかは疑問です。この方法を使用して、デリゲートのプロパティを設定します。

@property (nonatomic, assign) id<ControlDelegate> delegate;

プロパティの設定について疑問を持って正しい道を進んでいますか?

4

1 に答える 1

0

assignオブジェクト(デリゲートを使用する)がデリゲートのメンバーまたはデリゲートのメンバーなどである場合、デリゲートをプロパティとして宣言します。この場合、retainプロパティによってメモリリークが発生します。他の場所では、代理人を保持しない理由がわかりません。それがあなたに受け入れられるなら-あなたの財産を次のように宣言してみてください:

@property (nonatomic, retain) id<ControlDelegate> delegate;
于 2011-05-06T08:45:29.607 に答える