分类最佳实践

时间:2012-05-25 12:08:28

标签: ios cocoa categories

我正在使用类别来解决我之前可能使用继承的一些问题。

我现在正在做的事情更多的是一个最佳实践问题,我不确定应该如何实施。我在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)并让方法做造型。

所以我正在寻找关于如何处理这个问题的一些指导。

1 个答案:

答案 0 :(得分:4)

  

我担心的是,我实际上正在制作UIActivityIndi​​catorView的第二个副本,这似乎是不必要的

不,你没有。您可能会因为从类别方法返回self而感到困惑,但这只是一个指针,而不是对象本身被复制。

但是,我会稍微改变一下:

- (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];