gpt4 book ai didi

objective-c - 这两个 Objective-C 消息表达式在内存方面是否等效?

转载 作者:行者123 更新时间:2023-12-04 02:49:34 24 4
gpt4 key购买 nike

以下两个消息表达式是否导致同一对象中的保留计数增加?

示例 1:

iVar = [Foo aClassMethodInFoo];
[iVar retain];

示例 2:

iVar = [[Foo aClassMethodInFoo] retain];

示例 1 是显式的,因为它是保留计数增加的 iVar 实例。示例 2 似乎表明它增加了从 [Foo aClassMethodInFoo] 返回的对象的保留计数。如果是这样,那么假设 aClassMethodInFoo 是一个方便的方法,我应该“释放”哪个对象来平衡早期的“保留”以避免泄漏内存?

最佳答案

两者完全相同。在第一种情况下,您将方法调用的结果分配给一个变量,然后对该变量调用 -retain。最终结果是变量保存了对象,并且您已对该对象调用了 -retain。在第二种情况下,您在方法调用的结果上调用 -retain,并将其结果分配给变量。由于 -retain 保证返回其接收者,最终结果是变量保存对象,并且您已在对象上调用了 -retain

在这两种情况下,内存语义完全相同。根据 Memory Management Programming Guide 中定义的命名约定,名为 +aClassMethodInFoo 的方法返回一个自动释放的对象,因此如果将结果存储在 ivar 中,则对 -retain 的调用是正确的。因此,当你完成后,你可以在你的 ivar 上调用 -release。您关于“我要‘释放’哪个对象”的问题是荒谬的,因为这里只有一个对象。

关于objective-c - 这两个 Objective-C 消息表达式在内存方面是否等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7248210/

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