iOS 中的 [Class new] 和 [[Class alloc] init] 有啥区别? [复制]
Posted
技术标签:
【中文标题】iOS 中的 [Class new] 和 [[Class alloc] init] 有啥区别? [复制]【英文标题】:What is the difference between [Class new] and [[Class alloc] init] in iOS? [duplicate]iOS 中的 [Class new] 和 [[Class alloc] init] 有什么区别? [复制] 【发布时间】:2012-06-30 15:46:11 【问题描述】:可能重复:alloc, init, and new in Objective-C
我对@987654323@ 和[[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]
?我认为应该有一些不同。
请解释一下两者的区别、优缺点?
【问题讨论】:
可以参考这个链接macresearch.org/difference-between-alloc-init-and-new 【参考方案1】:Alloc: NSObject 的类方法。返回接收类的新实例。
Init:NSObject 的实例方法。由子类实现,用于在分配内存后立即初始化新对象(接收者)。
新增:NSObject 的类方法。分配接收类的新实例,向其发送初始化消息,并返回初始化对象。
Release:NSObject 委托的实例方法。减少接收者的引用计数。
Autorelease:NSObject 委托的实例方法。将接收者添加到当前的自动释放池中。
保留: NSObject 委托的实例方法。增加接收者的引用计数。
复制: NSObject 委托的实例方法。返回一个作为接收者副本的新实例。
所以我们可以这么说
alloc 与 init 一起使用
new = alloc + init
【讨论】:
太棒了!这很有帮助! 代表们与此无关。你的意思是NSObject
protocol?【参考方案2】:
+new
方法只是+alloc
和-init
的简写。所有权语义是相同的。使用+new
的唯一好处是它更简洁。如果您需要为类的初始化程序提供参数,则必须改用 +alloc
和 -initWith...
方法。
【讨论】:
【参考方案3】:这里:alloc, init, and new in Objective-C
基本上这是一个现代与传统的问题。 init 相对于 new 最直接的优势是有很多自定义的 init 方法。
【讨论】:
以上是关于iOS 中的 [Class new] 和 [[Class alloc] init] 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Java 中的 clone( ) 和 new,哪个效率更高?