在Objective C中,大多数对象都是使用[[ObjectType alloc] init]
创建的。我也见过使用[[ObjectType alloc] initWithOption1:...]
(带参数)的初始化器。但是建议在不使用alloc
方法的情况下初始化某些类,例如使用方法UIAlertController
或[UIAlertController alertControllerWithTitle:message:preferredStyle:]
初始化的新iOS 8 UIButton
,使用buttonWithType:
方法。 这样做的优点/缺点是什么?如何制作这样的初始化器?
答案 0 :(得分:4)
假设你正在使用ARC(我找不到借口不为任何新项目使用ARC),这两种方法之间基本没有区别。
要创建其中一个工厂方法,它就像这样简单......
给出初始化方法:
- (instancetype)initWithArgument1:(id)arg1 argument2:(id)arg2;
我们创建以下类方法:
+ (instancetype)myClassWithArgument1:(id)arg1 argument2:(id)arg2 {
return [[self alloc] initWithArgument1:arg1 argument2:arg2];
}
就这么简单。
现在而不是:
MyClass *obj = [[MyClass alloc] initWithArgument1:foo argument2:bar];
我们可以简单地写一下:
MyClass *obj = [MyClass myClassWithArgument1:foo argument2:bar];
答案 1 :(得分:1)
它被称为便利初始化器。这些类方法将初始化和配置的对象传递给您。在它们的实现中,它们自己执行alloc / init部分。谷歌在它上面,你会发现许多例子。