答案 0 :(得分:7)
new = alloc + init
此方法是alloc和init的组合。就像alloc一样 初始化新对象的isa实例变量,使其指向 到类数据结构。然后它调用init方法 完成初始化过程。
+new
完全按字面意思实现:
+ (id) new
{
return [[self alloc] init];
}
且new
不支持自定义初始值设定项(例如initWithObjects
),因此alloc + init
比new
更明确
所以现在的问题是:
[NSArray数组] vs [[NSArray alloc] init]
这些之间的主要区别在于您是否使用ARC (自动参考计数)。第一个返回一个保留和 自动释放的对象。第二个返回一个唯一的对象 保留。所以在第一种情况下,如果你愿意,你会希望保留它 想要保持它比当前的运行循环更长的时间。在里面 第二种情况,如果你没有,你会想要释放或自动释放它 想要保持它。
现在我们有了ARC,这改变了一些事情。基本上,在ARC代码中,它 无论你使用哪种都无关紧要。
但请记住,[NSArray array]
会返回一个空的不可变数组,因此将array
与NSMutableArray
一起使用会更有意义
有关详情:
alloc, init, and new in Objective-C
Use of alloc init instead of new
Difference between [NSMutableArray array] vs [[NSMutableArray alloc] init]