이것은 this one과 관련된 질문입니다.메시지를 보낼 때 NSMutableArray가 먼저 유지 한 다음 두 번 릴리스 할 수 있습니까?
변경할 수있는 배열에서 개체를 제거 할 때 그 개체에 '보관'메시지가 전송 될 수 있다는 것을 알았 기 때문에 위의 질문을 검색했습니다. w.m은 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
답변 해 주셔서 감사합니다. 나는 내 코드에 뭔가 (나는 이미 그것을 찾았습니다.) 무언가가 있다는 것에 전적으로 동의합니다. – sehone
그러나 내 관심사는 버그 자체에 관한 것이 아니라 로그 정보'메시지가 해제 된 개체로 전송 됨 '입니다. Apple의 문서를 읽었지 만 NSMutableArray가'removeObject' 중에 '보존'작업을 수행한다고 들었습니다. 그래서 실제로 나는 누군가가 여기에 증거를 공유 할 수 있기를 기대하고 있습니다. – sehone