我对[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]
?我认为必须有一些区别。
请解释这些差异,专业人士和两者的缺点?
答案 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方法。