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

我对@9​​87654323@ 和[[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] 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

cpp►new Class

js面向对象-prototype

Java中new和Class.forName的区别

Java 中的 clone( ) 和 new,哪个效率更高?

php中的$this->$object =& new $class是啥意思[重复]

实战_5:创建应用界面并配置布局