2

以前は継承を使用していた可能性のあるいくつかの項目について、カテゴリを使用して頭を悩ませています。

私が今していることは、それをどのように実装すべきかわからないという、よりベストプラクティスの質問です。UIActivityIndicatorView基本的にアクティビティインジケーターを任意のビューに配置するために使用されるカテゴリを作成しています。以下に、私がそれをどのように行っているかのコード例を示します。私の主な質問は、これが良いかどうかです。そして、それが事実ならなぜそれが悪いのかについてのコメントをいただければ幸いです。ありがとう。

カテゴリ:

@interface UIActivityIndicatorView (Customizations)
    - (UIActivityIndicatorView *) inView:(UIView *) target;
@end

実装:

@implementation UIActivityIndicatorView (Customizations)

- (UIActivityIndicatorView *) inView:(UIView *) target {
    [self startAnimating];
    [self setHidden:NO];
    self.frame = target.bounds;
    self.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.6f];

    return self;
}
@end

次に、次のように使用します。

[background addSubview:[loader inView:background]];

別の方法としては、初期化関数を作成してコンテナビューを取得し、「スタイル設定された」ビューを返すか、何も返さずに(void)、メソッドにスタイル設定を行わせることだと思います。

だから私はこれをどのように扱うかについてのガイダンスを探しています。

4

1 に答える 1

4

私が心配しているのは、UIActivityIndi​​catorViewの2番目のコピーを実際に作成していることです。これは不要と思われます。

いいえ、しません。カテゴリメソッドから自分自身を返しているという事実に混乱するかもしれませんが、それは単なるポインタであり、オブジェクト自体がコピーされるわけではありません。

ただし、少し異なる方法で実装します。

- (void) addToSuperView:(UIView *) target {
    [self startAnimating];
    [self setHidden:NO];
    self.frame = target.bounds;
    self.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.6f];

    [target addSubview:self];
}

そうすれば、追加するときに余分な不要な呼び出しを行う必要がありません。

[loader addToSuperView:background];
于 2012-05-25T12:18:25.593 に答える