gpt4 book ai didi

objective-c - Release、Dealloc 和 Self 引用

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

所以我认为我已经解决了所有这些问题。然后突然间我遇到了一个我无法弄清楚的错误(崩溃)。然后,在进行了修复崩溃的研究之后,我发现我认为我对这些关键领域的了解都有些错误。

下面是我要提出的 8 个问题,希望有人能回答 - 这些问题的答案将极大地帮助我重新理解正轨。提前致谢!

问题 1)如果引用为 nil,是否可以在对象上调用 Release?这应该是无害的,对吧?

问题 2)如果该引用已被释放且引用计数为 0,是否可以对该对象调用 Release?

Q3)是否有必要在释放后设置对 nil 的引用?如果不将其设置为 nil 会怎样?

Q4) nil 和 NULL 之间真的有区别吗,还是只是一种语义上的东西,可以帮助读者/开发人员一眼就知道对象类型?

问题 5)使用属性需要使用“Self”指针吗?

Q6)使用实例变量要求不使用“Self”指针?

Q7) 我什么时候想使用实例变量而不是它的属性?我认为值类型数据成员是可以的,因为它们不涉及释放和保留。

Q8) 是否有必要从 dealloc 函数中调用对象的 dealloc?在许多示例中,我看到调用了 Release,但没有调用 Dealloc - 这样的教程不正确吗?

最佳答案

A1) [nil release] 没问题(什么都不做)

A2) 不可以。不要在对象被释放后触摸它们。释放后应设置为 nil。

A3) 没有必要将已释放的指针设置为 nil,但你会得到悬空指针(即,你无法判断一个对象是否有效)。将属性设置为 nil 通常用于释放底层的 ivar,因此不这样做可能会导致内存泄漏

A4) nil 和 NULL 都是零,所以在技术上是一样的。

A5) 是的,你必须对属性使用 self.someProperty,就像你使用 [self someProperty] 如果它只是一个方法一样

A6) self 本质上是一个结构,因此您可以像这样访问 ivars:self->someIvar。不过,没有必要。

A7) 当你出于任何原因不想运行 setter/getter 方法时。当 setter 不允许 nil 值时,我偶尔会使用它,我需要释放变量

A8) 当 release 被调用的次数正确时,dealloc 会被自动调用。你不应该直接调用 dealloc([super dealloc] 除外)

关于objective-c - Release、Dealloc 和 Self 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211018/

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