我正在从
开始一个新线程- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
方法,使用
MyThread *thread1 = [[MyThread alloc] init] ;
[thread1 start] ;
其中MyThread
是NSThread
的子类。
如果我在线程的 main
方法中运行一个空的 for
循环并退出,它就可以正常工作。但是,一旦我尝试使用 Cocoa API,例如 NSString
甚至 NSAutoReleasePool
,我的程序就会因进入调试器而挂起。
问题的根源可能是什么?
[提示]:我尝试单步执行调试器,它曾经给我一个 SIGBUS
错误。可能存在哪些内存访问问题?
最佳答案
问题很棘手。我在 main() 方法的中间声明了一个 1 MB 的大字符数组。编译器将此声明推到已编译方法的顶部。不知何故,这个空间太大了,无法要求,因此程序在进入 main 方法后会立即崩溃。不幸的是,即使我在这个声明之前插入了一个 return 语句,程序也会崩溃,因为编译器会将此声明推到最开始。我将该数组声明更改为 malloc() 并且程序运行了。
关于multithreading - Cocoa线程无法访问Cocoa API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7375010/