2011-05-06 17 views
1

私は、VIEW-CONTROL-MODEL構造に委譲を広範囲に使用しています。通常、CONTROL & MODELオブジェクトはアプリの実行中は保持されているため、問題はほとんど発生しません。iosデリゲートが公開されているかどうかを知る方法

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

ダイナミックUIViewControllerインスタンスが割り振られているデリゲートオブジェクトに、nilを設定すると、割り当てが解除されるときに、EXC_BAD_ACCESSエラーを回避する方法がわかります。

しかし、私はいつも使用している場合でも:

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

それがエラーを防止するために完璧ではありません。別のVIEWオブジェクトがCONTROLオブジェクトの1人または限られた数のデリゲートを共有している場合、代理人が意図せずに別のものに置き換えられる可能性が常に高くなるため、EXC_BAD_ACCESSが発生します。

デリゲートを管理し、デリゲートメソッドを呼び出す瞬間ですか?

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

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

私はプロパティの設定については疑う右のトラックに行くのだろうか?

答えて

0

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

@property (nonatomic, retain) id<ControlDelegate> delegate; 
関連する問題