multithreading - Cocoa线程无法访问Cocoa API

标签 multithreading cocoa

我正在从

开始一个新线程
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 

方法,使用

MyThread *thread1 = [[MyThread alloc] init] ;
[thread1 start] ;

其中MyThreadNSThread的子类。

如果我在线程的 main 方法中运行一个空的 for 循环并退出,它就可以正常工作。但是,一旦我尝试使用 Cocoa API,例如 NSString 甚至 NSAutoReleasePool,我的程序就会因进入调试器而挂起。

问题的根源可能是什么?

[提示]:我尝试单步执行调试器,它曾经给我一个 SIGBUS 错误。可能存在哪些内存访问问题?

最佳答案

问题很棘手。我在 main() 方法的中间声明了一个 1 MB 的大字符数组。编译器将此声明推到已编译方法的顶部。不知何故,这个空间太大了,无法要求,因此程序在进入 main 方法后会立即崩溃。不幸的是,即使我在这个声明之前插入了一个 return 语句,程序也会崩溃,因为编译器会将此声明推到最开始。我将该数组声明更改为 malloc() 并且程序运行了。

关于multithreading - Cocoa线程无法访问Cocoa API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7375010/

相关文章:

macos - NSMutableURLRequest 和内存问题

java - Android 中的 AsyncTask、线程

python - python 中正确的线程

c - 如何使用 OpenMP 在顺序循环中嵌套并行循环

objective-c - NSMutableArray 真的是堆栈或队列的良好后备存储吗?

iphone - 从错误的 url 加载 xml 时如何处理卡住程序?

java - 如何使用套接字进行线程以便程序不会停止

C# ProcessStartInfo 读取输出 "live"(并发)

macos - 为什么在我的基于 macOS 文档的应用程序中没有通过 Storyboard 调用 applicationDidFinishLaunching?

cocoa - 使用 NSAppleScript 从事件查找器窗口中检索选定文件的列表