之间有什么区别
NSNumber *number = [[NSNumber alloc]initWithInt:13];
和
NSNumber *number = [NSNumber initWithInt:13];
为什么在两者都解决相同的目的时才进行分配?
答案 0 :(得分:12)
[NSNumber initWithInt:]
无效,因为-initWithInt:
是实例方法,您将其发送到类。 [NSNumber numberWithInt:]
会起作用,但那可能是[[NSNumber alloc] initWithInt:]
附近的便利包装。
基础(以及在它上面构建的所有东西,包括UIKit,也可能是你自己在iOS应用程序中的类)使用two-stage creation技术。 +alloc
方法只负责为您的实例分配足够的内存,并设置一个指针,指出它是一个实例的类。然后,可以使用-init
(或-init…
)方法完成自定义设置。
此系统的优点是您的自定义初始化程序不必关心为对象分配内存。缺点是客户端代码必须调用两个阶段,这就是创建+new
和+numberWithInt:
等便捷构造函数的原因。
在更高级别,两阶段创建过程也用于支持类群集,如NSArray
和NSNumber
,其中使用的确切类型不是知道,直到调用初始化。 +alloc
可以返回占位符对象,然后在第二阶段替换自己。
答案 1 :(得分:2)
[NSNumber numberWithInt:42];
只是[[NSNumber alloc] initWithInt:42]
的捷径