gpt4 book ai didi

objective-c - 在 copyWithZone :, 中,我应该对所有分配使用区域还是仅对返回的对象使用区域?

转载 作者:行者123 更新时间:2023-12-03 17:37:23 24 4
gpt4 key购买 nike

假设我有一堂这样的课:

@interface SomeClass : NSObject<NSCopying> {
SomeOtherClass *obj;
}

在 copyWithZone: 的定义中,我这样做:

SomeClass *someCopy = [[SomeClass allocWithZone:zone] init];

所以我的问题是,如果我想复制 obj,其中哪一个是正确/推荐的?

选项A:

objCopy = [obj copyWithZone:zone];

选项B:

objCopy = [obj copy];

最佳答案

如果您使用引用计数内存管理(而不是垃圾回收),您应该使用[obj copyWithZone:zone]。此外,您应该(在相同情况下)使用 +allocWithZone: 而不是 +alloc 来分配副本。这会为指定内存区域中的实例分配内存(请参阅 NSZone)。如果开发人员要分配大约同时不再需要的许多对象,他们可能会使用单独的区域。然后,可以使用 NSRecylceZone 在一次操作中回收整个区域,从而有助于防止内存碎片。一般来说,不需要使用私有(private)区域(并且通常会损害性能;分析您的代码!)。假设开发人员想要在特定区域中获得副本,我认为您会假设他们希望所有相关实例都在同一区域中。

-copy+alloc 方法分别调用 -copyWithZone:+allocWithZone: 方法,通过默认区域。

关于objective-c - 在 copyWithZone :, 中,我应该对所有分配使用区域还是仅对返回的对象使用区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696256/

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