基本上,便利初始化器/构造器是一个类(静态/非成员)方法,它返回一个类的实例。
这意味着,为了获得一个类的实际实例,如果提供了便利构造器(或初始化器),您可以使用它,而不是显式分配对象。
它将取代标准的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 的便捷构造函数 NSMutableArray 的作用如下:
+ ( NSMutableArray * )arrayWithCapacity: ( NSUInteger )capacity
{
return [ [ [ NSMutableArray alloc ] initWithCapacity: capacity ] autorelease ];
}
注意最后对 autorelease 的调用吗?
这意味着该对象将在当前运行循环结束时自动释放,因此您不必自己动手(当然,如果您不明确保留它)。
最后说明
您没有提及您是否使用 ARC。
我以为不是这样的。
当然,如果您使用 ARC,则完全不同,因为保留/释放是根据变量限定符(强/弱)自动完成的(大部分时间)。 p>
但即使使用 ARC,您也应该知道引用计数的工作原理。