【发布时间】:2014-07-04 22:42:07
【问题描述】:
这段代码似乎有时会导致分段错误:
[[NSFileManager defaultManager] performSelectorOnMainThread:@selector(removeItemAtPath:error:) withObject:filePath waitUntilDone:YES];
我想在主线程中对文件执行所有操作,以避免在迭代整个文件夹时删除文件等冲突。
它会产生这个错误:
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x1084
Application Specific Information:
objc_msgSend() selector name: release
这是崩溃的主线程的堆栈跟踪:
Thread 0 Crashed:
0 libobjc.A.dylib 0x39fc8636 objc_msgSend + 22
1 Foundation 0x30214c67 __NSThreadPerformPerform + 452
2 CoreFoundation 0x2f7f6fef __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
3 CoreFoundation 0x2f7f64b7 __CFRunLoopDoSources0 + 204
4 CoreFoundation 0x2f7f4ca7 __CFRunLoopRun + 628
5 CoreFoundation 0x2f75f769 CFRunLoopRunSpecific + 522
6 CoreFoundation 0x2f75f54b CFRunLoopRunInMode + 104
7 GraphicsServices 0x346bc6d3 GSEventRunModal + 136
8 UIKit 0x320be891 UIApplicationMain + 1134
9 Pocket3 0x00050243 main (main.m:4)
10 libdyld.dylib 0x3a4bcab7 start + 0
我做错了什么?
看起来 NSFileManager 被释放得太早了,但是如果它是单例呢? 会不会和据说不是线程安全的方法 [NSFileManager defaultManager] 有关系?
【问题讨论】:
标签: objective-c thread-safety segmentation-fault nszombie