Objective C初始化方法:alloc / init与其他初始化器

时间:2015-03-15 19:55:53

标签: objective-c methods initialization initializer

在Objective C中,大多数对象都是使用[[ObjectType alloc] init]创建的。我也见过使用[[ObjectType alloc] initWithOption1:...](带参数)的初始化器。但是建议在不使用alloc方法的情况下初始化某些类,例如使用方法UIAlertController[UIAlertController alertControllerWithTitle:message:preferredStyle:]初始化的新iOS 8 UIButton,使用buttonWithType:方法。 这样做的优点/缺点是什么?如何制作这样的初始化器?

2 个答案:

答案 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部分。谷歌在它上面,你会发现许多例子。