什么是便利初始化程序,因为它与Objective-C有关?

时间:2012-05-21 21:42:50

标签: objective-c initialization lazy-initialization

我大约8个月前开始学习编程,从C,OOP开始,现在开始学习iOS,这是我的目标。在大多数情况下,一切都很顺利,我已经开始通过在xcode上编写小应用程序来练习。它只是像便利初始化器这样的小术语,有时会让我失望。任何人都可以为我定义这个术语,并给我一个快速的例子来说明它的用法吗?我理解分配和初始化的概念,但我无法区分初始化器和便利初始化器。我看过网上但运气不太好。

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:3)

基本上,便捷初始化器/构造函数是一个类(静态/非成员)方法,它返回一个类的实例。

这意味着,为了获得类的实际实例,您可以使用便捷构造函数(或初始化函数),如果提供了一个,而不是明确地分配对象。

它将取代标准alloc / init(或initWith...)方式。

<强>可是...

在内存管理方面,它有着完全不同的含义!

您不拥有便利构造函数返回的对象 这意味着您不必自己发布它。

例如,当您分配NSMutableArray

NSMutableArray * a = [ [ NSMutableArray alloc ] initWithCapacity: 10 ];

您调用了alloc。这意味着您必须释放该对象,因为您拥有

NSMutableArray * a = [ [ NSMutableArray alloc ] initWithCapacity: 10 ];

/* Some stuff here... */

[ a release ];

方便构造函数不是这样,因为对象将自动释放(它会自动放在当前的自动释放池中):

NSMutableArray * a = [ NSMutableArray arrayWithCapacity: 10 ];

/* Some stuff here... */
/* No need to release the array! */

基本上,这是arrayWithCapacity的{​​{1}}便利构造函数的作用:

NSMutableArray

请注意最后调用 autorelease ? 这意味着对象将在当前运行循环结束时自动释放,因此您不必自己执行(当然,如果您没有明确地保留它)。

最后的注释

您没有提及是否使用 ARC 我认为情况并非如此。

当然,如果你使用 ARC ,这是完全不同的,因为保留/释放是基于变量限定符(强/弱)自动(大部分时间)完成的。

但即使使用 ARC ,您也应该知道引用计数的工作原理。

答案 1 :(得分:0)

我有同样的疑问,但现在解决了:https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/MultipleInitializers.html

注意:如果上述链接失败,请阅读此备份:https://gist.github.com/JeOam/9116926