Objective c 删除AllObject并将NSMutableDictionary置零

Objective c 删除AllObject并将NSMutableDictionary置零,objective-c,nsmutabledictionary,dealloc,Objective C,Nsmutabledictionary,Dealloc,这可能会降低投票率。。。。但我得问问。 当“解除分配”可变字典时,您可以调用removeAllObjects,但您可以将其改为nil?那会有同样的结果吗? 例如,当您解除锁定一个数组时,将其设置为nil。我是否可以对可变数组执行此操作,而不是调用removeAllObjects?removeAllObjects不会取消分配字典。它只是从字典中删除所有键值。可以设置新的键值,而无需再次初始化。但将其设置为nil意味着您需要在插入新值之前再次初始化它。RemoveAllObjects不会解除字典的分

这可能会降低投票率。。。。但我得问问。 当“解除分配”可变字典时,您可以调用
removeAllObjects
,但您可以将其改为
nil
?那会有同样的结果吗?
例如,当您解除锁定一个数组时,将其设置为nil。我是否可以对可变数组执行此操作,而不是调用
removeAllObjects

removeAllObjects不会取消分配字典。它只是从字典中删除所有键值。可以设置新的键值,而无需再次初始化。但将其设置为nil意味着您需要在插入新值之前再次初始化它。

RemoveAllObjects不会解除字典的分配。它只是从字典中删除所有键值。可以设置新的键值,而无需再次初始化。但将其设置为nil意味着您需要在插入新值之前再次初始化它。

简短的回答是肯定的。如果删除对字典的引用(无论它是可变的还是不可变的),并且字典对象的引用计数达到0,则字典将被解除分配,从而释放对它以前持有的对象的所有引用。如果数组的对象的引用计数达到零,那么它们也将被解除分配

所有这些都是ARC自动完成的,因此您只需担心代码中没有保留对数组对象的任何引用,以确保它们被解除分配

NSMutableArray *arr = [NSMutableArray array]; //1 reference to the array
NSMutableArray *anotherReference = arr; //2 references to the array
arr = nil; //there is still 1 reference to the array, so it is not dealloced
anotherReference = nil; //no references left and the array is dealloced

希望这会有所帮助。简短的回答是肯定的。如果删除对字典的引用(无论它是可变的还是不可变的),并且字典对象的引用计数达到0,则字典将被解除分配,从而释放对它以前持有的对象的所有引用。如果数组的对象的引用计数达到零,那么它们也将被解除分配

所有这些都是ARC自动完成的,因此您只需担心代码中没有保留对数组对象的任何引用,以确保它们被解除分配

NSMutableArray *arr = [NSMutableArray array]; //1 reference to the array
NSMutableArray *anotherReference = arr; //2 references to the array
arr = nil; //there is still 1 reference to the array, so it is not dealloced
anotherReference = nil; //no references left and the array is dealloced

希望有帮助

首先,忽略绝对
重新计数
。这是无用的。请参阅(不幸消失的网站是新网站)

其次,词典的内容不会影响词典本身的使用寿命(除非词典中的一个对象对词典有很强的引用,从而创建了一个保留周期)

因此,
removeAllObjects
与字典的寿命完全正交(保留周期警告确实适用)

同样,当对字典的所有强引用(ARC)被销毁时,字典将被解除分配,在这个过程中,字典中对它所包含的对象的所有硬引用也将被释放

即:

最后的
dict=nil,字典可能已销毁。或者不是。它可能不会立即被销毁,因为
consumeDict:
在某处引起了一个强引用,或者因为
consumeDict:
调用了
retain
,然后
自动释放
,字典将一直保留到池中的水排干为止


说到池,有时,
[NSDictionary dictionary]
会返回一个自动删除的对象。因此,坐在调试器中,检查字典是否在将
dict
设置为nil(可能通过弱引用)后立即发布,将导致抱歉。请注意,+字典有时可能会返回自动删除的对象,有时则不会返回,具体取决于编译器的优化级别或版本。

首先,忽略绝对值
重新计算
。这是无用的。请参阅(不幸消失的网站是新网站)

其次,词典的内容不会影响词典本身的使用寿命(除非词典中的一个对象对词典有很强的引用,从而创建了一个保留周期)

因此,
removeAllObjects
与字典的寿命完全正交(保留周期警告确实适用)

同样,当对字典的所有强引用(ARC)被销毁时,字典将被解除分配,在这个过程中,字典中对它所包含的对象的所有硬引用也将被释放

即:

最后的
dict=nil,字典可能已销毁。或者不是。它可能不会立即被销毁,因为
consumeDict:
在某处引起了一个强引用,或者因为
consumeDict:
调用了
retain
,然后
自动释放
,字典将一直保留到池中的水排干为止


说到池,有时,
[NSDictionary dictionary]
会返回一个自动删除的对象。因此,坐在调试器中,检查字典是否在将
dict
设置为nil(可能通过弱引用)后立即发布,将导致抱歉。请注意,+字典有时可能返回自动释放的对象,有时则不返回,具体取决于编译器的优化级别或版本。

啊,我现在明白了。所以将它设置为nil是否会解除分配?是的nil表示它正在解除分配。它不会。在“圆弧”下,删除对对象的引用。在删除对该对象的所有引用之前,该对象不会解除分配。删除引用不是从字典中删除所有对象。如果我们从字典中删除所有对象,但有一个全局变量使其保持活动状态,字典将不会被取消分配。我的观点是删除引用与取消分配对象不同。啊,我现在明白了。所以将它设置为nil是否会解除分配?是的nil表示它正在解除分配。它不会。在“圆弧”下,删除对对象的引用。在删除对该对象的所有引用之前,该对象不会解除分配。删除引用不是从字典中删除所有对象。如果我们从字典中删除所有对象,但有一个全局变量k