有什么区别
NSNumber *number = [[NSNumber alloc]initWithInt:13];
Run Code Online (Sandbox Code Playgroud)
和
NSNumber *number = [NSNumber initWithInt:13];
Run Code Online (Sandbox Code Playgroud)
当两者都解决相同的目的时为什么要分配?
小智 12
[NSNumber initWithInt:]将无法工作,因为它-initWithInt:是一个实例方法,你将它发送到类.[NSNumber numberWithInt:]会工作,但那可能是一个方便的包装[[NSNumber alloc] initWithInt:].
基础(以及在其上构建的所有内容,包括UIKit以及可能在iOS应用程序中也可能是您自己的类)使用两阶段创建技术.该+alloc方法负责为您的实例分配足够的内存,并设置一个指针,指出它是哪个类的实例.然后可以在-init(或-init…)方法中完成自定义设置.
此系统的优点是您的自定义初始化程序不必关心为对象分配内存.缺点是客户端代码必须调用两个阶段,这就是方便构造函数喜欢+new和+numberWithInt:创建的原因.
在更先进的水平,这两个阶段的创作过程也被用于支持类簇状NSArray和NSNumber,那里的确切类型使用是不知道,直到初始化器被调用.+alloc可以返回占位符对象,然后在第二阶段替换自身.
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |