copyWithZone 返回值所有权并保留计数

发布于 2024-10-11 03:58:52 字数 430 浏览 9 评论 0原文

我在苹果文档中读到有关 copyWithZone 的内容:

“返回的对象隐式由发送者保留,发送者负责释放它”。

因此,如果我写这个 :

 - (id)copyWithZone:(NSZone *)zone {
        MyObject* obj = [[[[self class] allocWithZone:zone] init] autorelease];
        [obj fillTheObj];

        return obj;
    }

并调用 : ,

MyStuff* obj = [varobj copy];

obj 会被保留吗?如果我不设置自动释放,那么保留计数会怎样?

I read in the apple documentation about copyWithZone :

"The returned object is implicitly retained by the sender, who is responsible for releasing it".

So if I write this :

 - (id)copyWithZone:(NSZone *)zone {
        MyObject* obj = [[[[self class] allocWithZone:zone] init] autorelease];
        [obj fillTheObj];

        return obj;
    }

and I call :

MyStuff* obj = [varobj copy];

will obj be retained? What about the retain count if I don't set autorelease?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倒带 2024-10-18 03:58:52

不要在您的 copyWithZone 方法中自动释放它,否则您将不会拥有它(并且可能甚至无法用它做任何事情)。

删除自动释放,obj 将适当保留在 MyStuff 复制中。您只需在完成后release它即可。

Apple 的句子是说发送者(即您的 MyStuff *obj 初始化)拥有所有权并需要释放它。 “发送者”指的是发送copy消息的对象,而不是您的copyWithZone方法。

Do not autorelease it in your copyWithZone method or you won't own it (and likely won't be able to even do anything with it).

Remove the autorelease and obj will be appropriately retained in the MyStuff copying. You simply need to release it when you're done with it.

The Apple sentence is saying that the sender -- which is your MyStuff *obj initialization -- has ownership and needs to release it. "Sender" refers to the object that sent the copy message, not your copyWithZone method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文