iOS中的[Class new]和[[Class alloc] init]有什么区别?

时间:2012-06-29 04:53:01

标签: ios objective-c new-operator allocation init

  

可能重复:
  alloc, init, and new in Objective-C

我对[Class new][[Class alloc] init]感到有些困惑。我使用content[Class new]定义了一个对象[[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]?我认为必须有一些区别。

请解释这些差异,专业人士和两者的缺点?

3 个答案:

答案 0 :(得分:130)

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

Init :NSObject的实例方法。由子类实现,在分配了内存之后立即初始化一个新对象(接收者)。

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

发布:NSObject委托的实例方法。减少接收者的参考计数。

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

保留: NSObject委托的实例方法。增加接收者的引用计数。

复制: NSObject委托的实例方法。返回一个新实例,它是接收者的副本。

总而言之,我们可以说

alloc与init

一起使用

new = alloc + init

答案 1 :(得分:28)

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

答案 2 :(得分:9)

此处:alloc, init, and new in Objective-C

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