gpt4 book ai didi

cocoa - 我可以使用同一个 NSZone 两次吗?

转载 作者:行者123 更新时间:2023-12-03 16:18:55 26 4
gpt4 key购买 nike

第一次尝试实现 NSCopying,我对 NSZone 的细微之处有一个疑问:

- (id)copyWithZone:(NSZone *)zone {
MyClass *copy = [[[self class] allocWithZone:zone] init];

copy.array = [[self.array mutableCopyWithZone:zone] autorelease];

return copy;
}

在此示例中,我使用 NSZone 两次:第一次分配对象,然后再次分配数组的副本。这合法吗?有必要吗?我可以简单地执行 mutableCopy,并且我还在考虑使用 -initWithArray:copyItems: 作为可能的替代方案。

最好的办法是什么?对于“我需要生成的数组的对象是浅拷贝还是深拷贝?”的问题,请随意选择任何一种方式。对我来说关键是两次使用 NSZone 是否安全。

最佳答案

从同一个区域创建多个对象正是区域被发明的目的。这个想法是,您可以创建一个区域,并从该区域创建一个或多个对象(它们可能会创建任何相关对象),然后您可以销毁该区域,从而销毁其中的所有对象。

问题在于,这与引用计数的概念(即所有权)相当不相容。如果你吹走一个包含一个或多个物体的区域,而这些物体仍然拥有(即,期望仍然能够使用),事情就会崩溃。如果在您销毁该区域时,所有这些对象都已被其所有所有者释放,那么它们已经一次被释放一个,因此该区域不会完成任何任务,因此是不必要的。

因此,zones have been killed off ,因此,尽管出于风格一致性的考虑,您可能仍然更喜欢按照现在的方式进行操作,但它不会对运行时发生的情况产生任何显着差异。

关于cocoa - 我可以使用同一个 NSZone 两次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354858/

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