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 的第二个副本,这似乎没有必要

不,你没有。您可能会对您从类别方法返回 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];
于 2012-05-25T12:18:25.593 回答