【发布时间】:2013-01-26 22:12:31
【问题描述】:
我看到了一种让我很感兴趣的初始化视图控制器的方法。可能是我缺乏经验,但我觉得它非常有用,但是,我正在尝试看看是否有任何理由应该避免它,所以我知道我是否也应该采用它。
UIViewController* imageC = [UIViewController imageViewController];
其中imageViewController 是类别中的静态方法:
+(UIViewController*) imageViewController
{
return [[UIViewController alloc] initWithNibName:@"ImageViewController" bundle:nil];
}
这是好的、可靠的设计吗?我想是的,但不确定。作为静态方法意味着它缺乏上下文,但不确定在这种情况下这是一个问题。 如果你使用这种方法,你长期会遇到什么问题?(如果有的话)
【问题讨论】:
-
如果你想要一个方便的构造方法,让它成为你的派生视图控制器类的类方法,而不是 UIViewController。
-
@HotLicks 为什么?每次调用它都会返回一个不同的实例,多次调用应该可以吗?没看懂,能解释一下吗?
-
首先,当子类上的方法也能正常工作时,创建一个类别是愚蠢的。其次,这样您就可以为您定义的每个 VC 类拥有一个同名的
convenienceConstructor方法——需要保留的名称更少。在添加了多个视图控制器之后,您会发现为什么您的方案很差。 -
并且该方法应该返回一个值,该值是创建的对象的类,而不是 UIViewController。
-
@HotLicks 我不同意
it's silly to make a category when a method on a subclass will work just as well。有时您不需要子类(尽管它也可以正常工作)。例如,您可以在UIColor上有一个方便的构造函数,它返回一个自定义颜色,如[UIColor turquoise]。不需要在那里进行子类化。
标签: objective-c oop objective-c-category