加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:16:10 所属栏目:百科 来源:网络整理
导读:我的主程序产生一个线程,执行以下命令: // alloc autorelease pool somewhere beforeNSArray *blah = [NSArray arrayWithObject: @"moo"];[self performSelectorOnMainThread: @selector(boonk:) withObject: blah waitUntilDone: NO];// release autorelea
我的主程序产生一个线程,执行以下命令:

// 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引用计数约定或协议来处理这种情况(交叉线程等待发布),或者是第二种解决方案,它的工作方式是什么?

解决方法

实际上,performSelectorOnMainThread会保留其参数,直到执行选择器之后,因此不需要这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读