iOS中的和 init有什么区别?
可能重复:
在Objective-C中的alloc,init和new
我对[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]
呢? 我认为一定有一些区别。
请解释两者的差异,优缺点?
Alloc: NSObject的类方法。 返回接收类的新实例。
Init :NSObject的实例方法。 由子类实现以便在分配内存后立即初始化一个新的对象(接收者)。
新 :NSObject的类方法。 分配接收类的新实例,发送一个init消息,并返回初始化的对象。
发布 :NSObject委托的实例方法。 减less接收机的参考计数。
Autorelease :NSObject委托的实例方法。 将接收器添加到当前的自动释放池。
保留: NSObject委托的实例方法。 增加接收器的引用计数。
复制: NSObject委托的实例方法。 返回接收者副本的新实例。
所以最后我们可以这样说
分配随着初始化
new = alloc + init
+new
方法只是简单的+alloc
和-init
。 所有权语义是相同的。 使用+new
的唯一好处是它更简洁。 如果您需要为类的初始化程序提供参数,则必须使用+alloc
和-initWith...
方法。
这里: Objective-C中的alloc,init和new
基本上这是一个现代与传统的问题。 init比new更直接的优点是有许多自定义的init方法。