以下内容在Objective-C中很常见。
- (id)init {
if (self = [super init]) {
// custom initialization
}
return self;
}
因为-init
是一个实例方法,所以必须在类的有效实例上调用它,并且必须实例化类的实例。此实例化会占用内存。 在-init
上调用super
是否使用内存,因为它必须实例化一个新对象以调用init
方法?
答案 0 :(得分:2)
调用-init是否超级使用内存,因为它必须实例化一个新对象来调用init方法?
不,因为你的前提是假的。 super
作为消息的接收者,与self
是相同的对象;它只是编译器使用objc_msgSendSuper()
而不是objc_msgSend()
的信号。前者使用超类启动方法查找,但运行该方法的实例仍然相同。
使用super
关键字无法创建新实例。
答案 1 :(得分:1)
这一切都取决于链条上的内容。
如果只是" [NSObject init]
",则没有任何(明显的)发生。
但如果它" [BrianTracySuperAwesomeBaseClass init]
"有很多初始化和设置各种ivars和属性,然后是的,你使用了一点内存。
一般情况下,你不应该加载你的" init
"有很多东西的方法......相反,你应该依赖于lazy loading或为你的Objective C对象分配点播的东西。