gpt4 book ai didi

objective-c - 在 Objective-C 中给自己赋值

转载 作者:太空狗 更新时间:2023-10-30 03:09:48 26 4
gpt4 key购买 nike

我来自 C++ 世界,所以分配 this 的想法让我不寒而栗:

this = new Object; // Gah!

但是在 Objective-C 中有一个类似的关键字,self,这是完全可以接受的:

self = [super init]; // wait, what?

许多示例 Objective-C 代码都在 init 例程中使用了上述行。我的问题:

1) 为什么对 self 的赋值有意义(像“因为语言允许”这样的回答不算数)

2) 如果我没有在我的 init 例程中分配 self 会发生什么?我是否将我的实例置于某种危险之中?

3) 当以下 if 语句失败时,这意味着什么以及我应该如何从中恢复:

- (id) init
{
self = [super init];

if (self)
{
self.my_foo = 42;
}

return self;
}

最佳答案

这是新人经常挑战的话题:

基本上,它源于这样一种想法,即父类(super class)可能已经覆盖了指定的初始化程序,以返回一个与从 +alloc 返回的对象不同的对象。如果您没有将 super 的初始化程序的返回值分配给 self,那么您可能正在处理一个部分初始化的对象(因为 super initialized 与您正在初始化的对象不同)。

总的来说,super 很少返回不同的东西,但在某些情况下确实会发生。

关于objective-c - 在 Objective-C 中给自己赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1341734/

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