0

私は独自のカスタムフォトギャラリーコントロールを作成しました。このコントロールでは、ユーザーが写真をタップして大きなバージョンに移動したり、その他の必要なアクションを実行したりできます。

このギャラリーを保持しているUIViewControllerにセレクターが含まれるように、これを実行したいと思います。

- (IBAction)photoThumbnailClicked(id)sender
{
    // Enlarge the photo here
}

どういうわけか、フォトギャラリーオブジェクトにビューコントローラーとセレクターの参照を保持したいので、各写真のサムネイルボタンが生成されるときに、ターゲットを次のように設定できます。

[thumbnail addTarget:self.target
                   action:self.action
         forControlEvents:UIControlEventTouchUpInside];

私は現在、このような参照を保持していますが、メモリの問題がある可能性があると信じる理由があるため、これが最善の方法かどうかはわかりません。

PhotoGallery.h:

@interface PhotoGallery : UIScrollView

@property UIViewController *target;
@property SEL action;

- (void)setTarget:(UIViewController*)viewController
     withAction:(SEL)action;
@end

PhotoGallery.mのsetTargetメソッド:

- (void)setTarget:(UIViewController*)target withAction:(SEL)action
{
    self.target = target;
    self.action = action;
}

これはこれを行うための最良の方法ですか?そうでない場合は、代わりに何をすべきですか?

助けてくれてありがとう!

4

1 に答える 1

1

私はARCを仮定しました

ビュー階層が次のようになっている場合:

someViewControllerOrView   <------------|
       -                                |
  <any number of views>                 |
            -                           |
        photoGalleryInstance            |
                             -target ----

次に、おそらく弱参照にしたいと思うでしょう。targetそうしないと、「保持サイクル」が発生する可能性があります。それはsomeViewController保持されphotoGalleryInstancephotoGalleryInstance保持されsomeViewController、どちらも解放されることはありません。

@property (weak) UIViewController *target;
//or @property (unsafe_unretained) UIViewController *target; if target is < 5.0

それ以外の場合、コードはこのパターンを実装する標準的な方法のように見えます。

于 2013-01-29T19:07:54.930 に答える