これはこれに関連する質問です。
可変配列からオブジェクトを削除すると、そのオブジェクトに「保持」メッセージが送信されている可能性があることに気付いたので、上記の質問を検索しました。wmは、NSMutableArray の内部実装が最初にオブジェクトを保持し、次にオブジェクトを保持する可能性があると回答しました。そのオブジェクトを削除するときは、2 回離します。
私の質問は次のとおりです。これに対する証拠はありますか? または、関連する詳細を知っている人はいますか?
以下のログを分析しているときにこの問題に遭遇しました。コードに何か問題があることはわかっていますが、私の懸念はバグ自体ではなく、「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