gpt4 book ai didi

ios - 为什么你不需要在你的子类 init 方法实现中 [super alloc]?

转载 作者:可可西里 更新时间:2023-11-01 06:23:15 25 4
gpt4 key购买 nike

当我们在子类的 init 方法实现中执行 self = [super init]; 时,

我不明白为什么不是self= [[super alloc] init];

在第一种情况下,你怎么能初始化你还没有分配内存的东西呢?

这是因为您实际上并没有初始化父类(super class)对象,而是使用父类(super class)的 init 方法先初始化自己吗?

如果是这样,我们是在何时何地为自己分配内存的?

是否只是假设我们在调用此 init 方法之前在程序的其他地方进行了分配?

语法基本上是说 [subclass initUsingMySuperClassImplementationFirst] 吗?

最佳答案

I don't understand why it's not self= [[super alloc] init];

因为当 init 被调用时,其他人已经分配了内存。

注意alloc是类方法,init是实例方法。当 init 被调用时,对象已经被创建。

例如:

MyObject *someObject = [[MyObject alloc] init];

alloc 创建并返回分配的 MyObjectinit 只是设置 - 初始化任何自定义属性等。

这相当于:

MyObject *someObject = [MyObject alloc];
someObject = [someObject init];

Is it just assumed that we did the alloc somewhere else in our program before calling this init method?

这不仅是假定的,而且是有保证的——因为不这样做就不可能到达 init。例如,如果您调用:

MyObject *someObject = [MyObject init];

这行不通,因为 init 是一个实例 方法,而不是一个 方法。 (如果您想了解更多关于差异的信息,请参阅 What is the difference between class and instance methods?。)

关于ios - 为什么你不需要在你的子类 init 方法实现中 [super alloc]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com