Objective-C NSThread 引用计数约定(保留与自动释放)

标签 objective-c multithreading memory-management conventions nsthread

我的主程序生成一个线程,该线程执行以下操作:

// alloc autorelease pool somewhere before
NSArray *blah = [NSArray arrayWithObject: @"moo"];
[self performSelectorOnMainThread: @selector(boonk:) withObject: blah
      waitUntilDone: NO];
// release autorelease pool somewhere after

现在,这对我来说似乎有问题,因为自动释放池可能会在选择器 boonk: 完成执行之前被释放,这会导致崩溃。

所以,我的下一步自然是:

// alloc autorelease pool somewhere before
NSArray *blah = [[NSArray alloc] initWithObject: @"moo"];
[self performSelectorOnMainThread: @selector(boonk:) withObject: blah
      waitUntilDone: NO];
// release autorelease pool somewhere after


- (void)boonk: (id)data
{
   // do something with data
   [data release];   // release the ref count the thread added
}

这绝对没有错误,但是......看起来不自然。是否有 objective-c 引用计数约定或协议(protocol)来处理这种情况(跨线程 NO-wait 发布),或者是否有第二种解决方案?

最佳答案

实际上,performSelectorOnMainThread 会保留其参数,直到执行选择器之后,因此没有必要这样做。

关于Objective-C NSThread 引用计数约定(保留与自动释放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2041375/

相关文章:

ios - 如何在Objective-C中识别自定义类与框架类

c++ - par_unseq 和 "vectorization-unsafe"函数

c++ - 如何检查我的 C++ 程序在内存中的增长状态?

c++ - 使用析构函数删除动态对象? C++

C# : Thread Workload and Memory useage

php - 最好不要将 &$ 与大字符串一起使用以节省内存吗?

objective-c - "unrecognized selector sent to instance"具有继承自 NSAttributedString 的类

objective-c - 清除 NSTableView 内容

objective-c - 将来自Web服务的大量数据分块写入文件

Python 太多打开的文件、eventlet 和 multiprocessing.dummy