2012-06-16 7 views
1

필자는 CFXPreferencesPropertyListSourceSynchronizer와 CFXPreferencesPropertyListSource를 언급하면서 나에게 알려지지 않은 스레드에서이 크래시를 발생시키고 있습니다. NSUserDefaults에 액세스하는 별도의 스레드가 있습니다. (NSUserDefaults는 스레드로부터 안전합니다.) 누구나 여기서 무엇이 잘못되고 있는지 알아볼 수 있습니까? 그것은 CFRetain에 충돌환경 설정 (NSUserDefaults)에서 충돌이 발생합니까?

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0x444e4128 
Crashed Thread: 5 

Thread 5 name: Dispatch queue: CFPreferences Background Sync Queue 
Thread 5 Crashed: 
0 libobjc.A.dylib     0x34ec4f78 objc_msgSend + 16 
1 CoreFoundation     0x3710de90 CFRetain + 76 
2 CoreFoundation     0x3718aa96 __CFDictionaryStandardRetainValue + 62 
3 CoreFoundation     0x37114fe0 CFBasicHashCreateCopy + 832 
4 CoreFoundation     0x37124f50 CFDictionaryCreateMutableCopy + 388 
5 CoreFoundation     0x3712d340 -[CFXPreferencesPropertyListSourceSynchronizer initWithPropertyListSource:forLockedSynchronize:] + 232 
6 CoreFoundation     0x371b4800 __79-[CFXPreferencesPropertyListSource synchronizeInBackgroundWithCompletionBlock:]_block_invoke_0 + 56 
7 libdispatch.dylib    0x302e5c52 _dispatch_call_block_and_release + 6 
8 libdispatch.dylib    0x302f0ca4 _dispatch_queue_drain + 268 
9 libdispatch.dylib    0x302f0b12 _dispatch_queue_invoke$VARIANT$up + 30 
10 libdispatch.dylib    0x302f1784 _dispatch_worker_thread2 + 208 
11 libsystem_c.dylib    0x33a34df4 _pthread_wqthread + 288 
12 libsystem_c.dylib    0x33a34cc8 start_wqthread + 0 
+0

NSUserDefaults에 액세스 할 수있는 코드를 보여주십시오 –

답변

1

는 나의 추측은 일부 키 또는 일부 값을 통해 출시 한 또는 키 또는 값이 아닌 객체를 사용한다는 것입니다.

+0

당신이 옳았습니다, 아래를보십시오. 감사! – RickJansen

0

실지로, property.settinger에 self.string 객체를 올바르게 유지하지 못했습니다.

관심있는 대상을 찾기가 쉽지 않았습니다. 디버거와 좀비 오브젝트는 참조 된 오브젝트가 실제로 릴리스되었음을 알리는 데 도움이되었지만 디버거에서 16 진 주소가 참조한 오브젝트가 무엇인지 알 수 없었습니다. gdb가 아니고 lldb도 아니다. "po"는 "0x ... 유효한 객체를 가리 키지 않는 것"이라고 알려주었습니다.

NSLog(@"self.text=%@ self.text=(%p)", self.text,self.text); 

와 로그 및 오류 메시지에서 해당 주소를보고 :

은 결국 나는 헥스에 주소를 인쇄하여이 관심을 어떤 개체 발견.

+0

문제가 해결되었지만 원래 버전의 setter에는 아무런 문제가 없습니다. 'copy'는 불변 객체의 경우'retain'과 같은 효과를 가지므로'newstr'도'boolean_operator'와 같은 인스턴스를 가리키고 여전히 할당 해제되지 않기 때문에 꽤 합법적입니다. 문제가 아직 다른 곳에서있을 수 있음을주의하십시오. – tia

+0

그건 그렇고, 단지'@ synthesize'를 사용하지 않으시겠습니까? – tia

+0

속성 setter는 속성 설정자 그 이상입니다. 위의 코드는 제거되었습니다. "boolean_operator"속성이 변경되면 다른 일도 발생합니다. – RickJansen

관련 문제