0

这是一个与相关的问题。

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

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

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

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
4

1 回答 1

0

NSMutableArray 在内部做什么并不重要。这与你无关。只要它遵循内存管理规则,即它保留它以后需要保留的任何东西,并且只释放它保留的东西,它是否也保留并在随机的地方额外释放20次也没关系。添加额外的保留释放对永远不会降低程序的正确性。

如果您遇到崩溃,那么您在代码中做错了什么。

于 2013-04-12T09:08:27.077 回答