71

可能的重复:
Objective-C 中的 alloc、init 和 new

我对[Class new]和 有点困惑[[Class alloc] init]。我已经content使用[Class new]and 定义了一个对象[[Class alloc] init]

(1). NSMutableArray *content = [NSMutableArray new];
(2). NSMutableArray *content = [[NSMutableArray alloc] init];

[Class new]我的问题是关于和之间的区别[[Class alloc] init]。对我来说,(1)和(2)是相似的。如果(1)和(2)相似,那么为什么我们[[Class alloc] init]大部分时间都使用,而[Class new]不是?我认为应该有一些不同。

请解释一下两者的区别,优点和缺点?

4

3 回答 3

134

Alloc: NSObject 的类方法。返回接收类的新实例。

Init : NSObject 的实例方法。由子类实现以在分配内存后立即初始化新对象(接收器)。

:NSObject 的类方法。分配接收类的新实例,向其发送初始化消息,并返回初始化对象。

Release : NSObject 委托的实例方法。减少接收者的引用计数。

Autorelease : NSObject 委托的实例方法。将接收者添加到当前的自动释放池中。

Retain: NSObject 委托的实例方法。增加接收器的引用计数。

Copy: NSObject 委托的实例方法。返回一个作为接收者副本的新实例。

所以总而言之,我们可以说

alloc 与 init 一起使用

新 = 分配 + 初始化

于 2012-06-29T05:03:35.383 回答
29

+new方法只是+alloc和的简写-init。所有权语义是相同的。使用的唯一好处+new是它更简洁。如果您需要为类的初始化程序提供参数,则必须使用+allocand-initWith...方法。

于 2012-06-29T05:03:16.920 回答
9

此处:Objective-C 中的 alloc、init 和 new

基本上这是一个现代与传统的问题。init 相对于 new 最直接的优势是有很多自定义的 init 方法。

于 2012-06-29T05:01:13.377 回答