gpt4 book ai didi

objective-c - 当您在带有数组的数组中调用方法 removeAllObjects 时会发生什么?

转载 作者:行者123 更新时间:2023-12-04 18:14:41 25 4
gpt4 key购买 nike

假设我有一个 NSMutableArray *sasquatch里面有一些数组。

在 ARC 中,如果我调用 [sasquatch removeAllObjects];这会导致 sasquatch 数组中的所有数组都为零吗?这样 sasquatch 数组的数组中的对象也都被删除并释放等等?

因为我不知道我是否应该这样做:

 for (NSArray *animalPlanetSearchingFor in sasquatch){
[animalPlanetSearchingFor removeAllObjects];
}

在我调用 [sasquatch removeAllObjects]; 之前

最佳答案

它不会递归地清空所有数组——它会在删除时减少它们的引用计数。当数组的引用计数为 0 时,将删除所有对象。他们自己清理。

我,sasquatch的子数组没有改变——有一个异常(exception):如果 sasquatch持有对该子数组的最后引用。在这种情况下,元素(大脚野人的子数组)将被释放。

In ARC, if I call [sasquatch removeAllObjects]; does this cause all the arrays in the sasquatch array to be nil?



好吧,它只是发送 release对于每个元素, count (ETC。)。 NSArrays抱不动 nil元素——这是被禁止的。

因此,如果您制作 copy数组的 - 然后将添加对子数组的引用,并且您将延长子数组的生命周期,因为副本现在也持有引用。

So that the objects in the arrays of the sasquatch array are also all removed too and dealloced and stuff?



如果 sasquatch 持有最后一个引用,则子数组将在那时被释放。请记住,自动释放池中也可能存在引用,因此您的销毁顺序没有明确定义——即使在最简单的情况下也是如此。

另一种看待它的方式: sasquatch 中的所有内容当它的最后一个引用丢失时,它的子数组(递归地)将被销毁——只有当每个元素都是最后一个持有的引用时。

简而言之——无需调用 removeAllElements在任何一种情况下,都是为了清理。

关于objective-c - 当您在带有数组的数组中调用方法 removeAllObjects 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11960984/

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