SomeClass *obj = [SomeClass alloc];
NSLog(@"%@", obj);
obj = [obj initWithNSNumber:[NSNumber numberWithInt:1]];
NSLog(@"%@", obj);
两个日志语句始终显示相同的地址。这实际上是我所期望的,但这是标准的Objective-C行为吗?我的意思是我可以指望在不同的编译器/语言版本中这是相同的吗?
我真正想要的是一个很好的教程,它介绍对象初始化和相关过程如何在Objective-C中真正起作用。
编辑:在Wain的回答之后,向问题中添加了信息:如果初始化器的实现是这样的,我可以算一下这在不同的编译器/语言版本中是否是相同的:
self = [super init];
if (self) {
//..
}
return self
您真的无法在任何时候保证它。任何init
方法实现都有权丢弃已分配的内存,并用更合适的其他方法替换(基于传递给它的参数)。如果您尝试使用,则NSArray
很可能会获得不同的地址(任何实现为类集群的方法都是理想的选择)。
通过您的编辑,super
可以完成完全相同的操作。这就是为什么您写:
self = [super init];
因此,如果super
确实更改了分配的内存,则self
引用将被更新以指向新的分配。
不,您不能保证在不同版本的SDK中都相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句