【问题标题】: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 关键字创建新实例。
【解决方案2】:
这一切都取决于链条上发生了什么。
如果只是“[NSObject init]”,那么什么都没有发生(很明显)。
但如果它是“[BrianTracySuperAwesomeBaseClass init]”,需要进行大量初始化并设置各种 ivars 和属性,那么是的,您正在使用一些内存。
一般来说,你不应该加载你的“init”方法来处理很多事情......相反,你应该依赖lazy loading或为你的Objective C对象按需分配东西。