可能重复:
alloc, init, and new in Objective-C
我对[Class new]
和[[Class alloc] init]
有点困惑。我已经使用[Class new]
和[[Class alloc] init]
定义了一个对象content
。
(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]
?我认为肯定有一些不同之处。
请解释一下两者的区别、优缺点?
发布于 2012-06-29 13:03:35
分配: NSObject的类方法。返回接收类的新实例。
初始化:NSObject的实例方法。由子类实现,以便在分配新对象的内存后立即初始化该对象(接收器)。
新:NSObject的类方法。分配接收类的新实例,向其发送init消息,并返回已初始化的对象。
Release:NSObject委托的实例方法。递减接收器的引用计数。
Autorelease:NSObject委托的实例方法。将接收器添加到当前自动释放池中。
Retain: NSObject委托的实例方法。递增接收器的引用计数。
Copy: NSObject委托的实例方法。返回一个新的实例,它是接收器的副本。
所以最后我们可以说
alloc与初始化一起使用
new =分配+初始化
发布于 2012-06-29 13:03:17
+new
方法是+alloc
和-init
的简写。所有权语义是相同的。使用+new
的唯一好处是它更简洁。如果需要向类的初始化器提供参数,则必须使用+alloc
和-initWith...
方法。
发布于 2012-06-29 13:01:13
这里:alloc, init, and new in Objective-C
基本上,这是一个现代与传统的问题。与new相比,init最直接的优点是有许多自定义的init方法。
https://stackoverflow.com/questions/11256228
复制相似问题