发送删除消息时,NSMutableArray可能会先保留,然后释放两次?

发送删除消息时,NSMutableArray可能会先保留,然后释放两次?,nsmutablearray,retain,Nsmutablearray,Retain,这是一个与之相关的问题 当从可变数组中删除对象时,我注意到可能会有一条“retain”消息发送到该对象,因此我搜索了上述问题,其中给出了一个答案,其中提到NSMutableArray的内部实现可能首先保留对象,然后在删除该对象时释放它两次 我的问题是:有证据证明这一点吗?或者有人知道相关的细节吗 我在分析以下日志时遇到了这个问题,我知道我的代码有问题,但我关心的不是错误本身,而是“当removeObject时是否会有一些retain工作” Exception Type: EXC_BAD_INS

这是一个与之相关的问题

当从可变数组中删除对象时,我注意到可能会有一条“retain”消息发送到该对象,因此我搜索了上述问题,其中给出了一个答案,其中提到NSMutableArray的内部实现可能首先保留对象,然后在删除该对象时释放它两次

我的问题是:有证据证明这一点吗?或者有人知道相关的细节吗

我在分析以下日志时遇到了这个问题,我知道我的代码有问题,但我关心的不是错误本身,而是“当
removeObject
时是否会有一些
retain
工作”

Exception Type:  EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes: 0x0000000000000001, 0x0000000000000000
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
objc[299]: FREED(id): message retain sent to freed object=0x23f62a0

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread

0   libobjc.A.dylib                 0x9a3694fd _objc_error + 116
1   libobjc.A.dylib                 0x9a369533 __objc_error + 52
2   libobjc.A.dylib                 0x9a36783a _freedHandler + 58
3   com.apple.CoreFoundation        0x9879a8cb -[NSMutableArray removeObject:range:identical:] + 331
4   com.apple.CoreFoundation        0x9879a770 -[NSMutableArray removeObject:] + 96

NSMutableArray在内部做什么并不重要。这与你无关。只要它遵循内存管理规则,也就是说,它保留了以后需要保留的任何内容,并且只释放了它保留的内容,那么它是否在随机位置额外保留和释放了20次内容就无关紧要了。添加额外的retain release对不会降低程序的正确性


如果您遇到崩溃,那么您的代码中有错误。

谢谢您的回答,newacct。我完全同意您的看法,我的代码中有一些地方很长(我已经发现了)。但是,我关心的不是错误本身,而是发送给已释放对象的日志信息
消息retain
。我读过苹果的文档,但从未听说NSMutableArray会在
removeObject
期间执行一些
retain
工作。所以实际上我希望有人能在这里分享一些证据。