有什么区别
NSNumber *number = [[NSNumber alloc]initWithInt:13];
and
NSNumber *number = [NSNumber initWithInt:13];
当两者解决相同的目的时为什么要分配?
[NSNumber initWithInt:]
行不通,因为-initWithInt:
is an 实例方法并且您将其发送至class. [NSNumber numberWithInt:]
会起作用,但这(可能)是一个方便的包装[[NSNumber alloc] initWithInt:]
.
Foundation(以及在其上构建的所有内容,包括 UIKit 以及可能还有 iOS 应用程序中您自己的类)使用两阶段创作 http://www.informit.com/articles/article.aspx?p=1398610技术。这+alloc
方法只负责分配足够的内存对于您的实例并设置一个指针来说明它是哪个类的实例。然后可以在-init
(or -init…
) 方法。
该系统的优点是您的自定义初始化程序不必关心为对象分配内存。缺点是客户端代码必须调用这两个阶段,这就是为什么便利构造函数喜欢+new
and +numberWithInt:
被创建。
在更高级的层面上,两阶段创建过程也用于支持类群 like NSArray
and NSNumber
,在调用初始化程序之前,不知道要使用的确切类型。+alloc
可以返回一个占位符对象,然后在第二阶段替换自身。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)