在超级咀嚼记忆中打电话

时间:2014-04-24 04:11:05

标签: objective-c constructor initialization

以下内容在Objective-C中很常见。

- (id)init {
    if (self = [super init]) {
        // custom initialization
    }
    return self;
}

因为-init是一个实例方法,所以必须在类的有效实例上调用它,并且必须实例化类的实例。此实例化会占用内存。 -init上调用super是否使用内存,因为它必须实例化一个新对象以调用init方法?

2 个答案:

答案 0 :(得分:2)

  

调用-init是否超级使用内存,因为它必须实例化一个新对象来调用init方法?

不,因为你的前提是假的。 super作为消息的接收者,与self相同的对象;它只是编译器使用objc_msgSendSuper()而不是objc_msgSend()的信号。前者使用超类启动方法查找,但运行该方法的实例仍然相同。

使用super关键字无法创建新实例。

答案 1 :(得分:1)

这一切都取决于链条上的内容。

如果只是" [NSObject init]",则没有任何(明显的)发生。

但如果它" [BrianTracySuperAwesomeBaseClass init]"有很多初始化和设置各种ivars和属性,然后是的,你使用了一点内存。

一般情况下,你不应该加载你的" init"有很多东西的方法......相反,你应该依赖于lazy loading或为你的Objective C对象分配点播的东西。