gpt4 book ai didi

iphone - 将对象设置为 nil 与在 dealloc 中向其发送释放消息有什么区别

转载 作者:可可西里 更新时间:2023-11-01 03:36:00 28 4
gpt4 key购买 nike

我有对象:

MyClass *obj= [[MyClass alloc] init];

有什么区别:

[obj release]; // Only obj own this object.

和:

obj = nil;

当我设置 obj = nil 时,iOS 会释放 obj 吗?

我有一个指针,有时我将它指向一个对象,有时不指向它。所以,当我想释放一个指针时,我必须检查它是否为零?

最佳答案

这个十年前的回答,

现在仅具有历史意义。

今天,您必须使用 ARC。

干杯


非常简短的回答是不要只是将它设置为零。 你必须释放它。 将它设置为 nil 与释放它没有任何关系。你必须释放它。

但是值得记住的是如果它是一个属性,那么

self.obj = nil;

实际上会为您发布它。当然,也不能忘记“ self ”。部分!!!!

确实,

self.obj = anyNewValue;

确实会为您释放旧内存,神奇地清理所有内容并为其设置新值。因此,self.obj = nil 只是其中的一个特例,它释放并清理所有内容,然后将其保留为 nil。

因此,如果有人读到这篇文章是新的并且完全被内存弄糊涂了,

  1. 必须先释放,[x release]再设置为nil x=nil

  2. 如果您正在使用一个属性,“不要忘记 self.thingy”

  3. 如果你正在使用一个属性,你可以只说 self.x=nil 或者 self.x=somethingNew 它会负责释放和所有其他复杂烦人的事情.

  4. 最终,您将不得不学习有关发布、自动发布等所有复杂内容。但是生命是短暂的,暂时忘掉它吧:-/

希望对大家有帮助。

再次注意,这篇文章现在是完全错误的。使用 ARC。

仅限历史兴趣。

关于iphone - 将对象设置为 nil 与在 dealloc 中向其发送释放消息有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4212628/

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