【问题标题】:Does Calling -init on super Chew Up Memory是否在超级咀嚼内存上调用 -init
【发布时间】:2014-04-24 04:11:05
【问题描述】:

以下在 Objective-C 中是司空见惯的。

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

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

【问题讨论】:

    标签: objective-c constructor initialization


    【解决方案1】:

    在 super 上调用 -init 是否会占用内存,因为它必须实例化一个新对象才能调用 init 方法?

    不,因为你的前提是错误的。 super,作为消息的接收者,与self同一个对象;这只是给编译器使用objc_msgSendSuper() 而不是objc_msgSend() 的信号。前者用超类启动方法查找,但运行该方法的实例还是一样的。

    不会使用super 关键字创建新实例

    【讨论】:

    • “没有使用super关键字创建新实例”,谢谢澄清
    【解决方案2】:

    这一切都取决于链条上发生了什么。

    如果只是“[NSObject init]”,那么什么都没有发生(很明显)。

    但如果它是“[BrianTracySuperAwesomeBaseClass init]”,需要进行大量初始化并设置各种 ivars 和属性,那么是的,您正在使用一些内存。

    一般来说,你不应该加载你的“init”方法来处理很多事情......相反,你应该依赖lazy loading或为你的Objective C对象按需分配东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多