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

Pra*_*d G 68 allocation objective-c init new-operator ios

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

我有点困惑[Class new][[Class alloc] init].我content[Class new]和 定义了一个对象[[Class alloc] init].

(1). NSMutableArray *content = [NSMutableArray new];
(2). NSMutableArray *content = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

我的问题是关于之间的差异[Class new][[Class alloc] init].对我来说,(1)和(2)是相似的.如果(1)和(2)相似,那么为什么我们[[Class alloc] init]大部分时间都在使用[Class new]?我认为必须有一些区别.

请解释两者的差异,利弊?

Sha*_*anu 130

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

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

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

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

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

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

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

总而言之,我们可以这么说

alloc与init一起使用

new = alloc + init


dre*_*lax 29

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


Ceh*_*iro 9

这里:Objective-C中的alloc,init和new

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