iOS开发技巧(系列十一:performSelectorOnMainThread的一些细节)
iOS开发技巧(系列十一:performSelectorOnMainThread的一些细节)
召唤攻城狮 发表于4年前
iOS开发技巧(系列十一:performSelectorOnMainThread的一些细节)
  • 发表于 4年前
  • 阅读 545
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: performSelectorOnMainThread是NSObject的方法,所以所有的OC类都可以调用这个方法

在iOS编码过程中,我经常使用[self performSelectorOnMainThread:withObject:waitUntilDone]方法,这一般是在后台线程结束之后,回到主线程刷新界面,比如说你的代码可能会这样写,

[self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:YES];

- (void)refreshTableView

{

    [self.tableView reloadData];

}

这样的意思就是在主线程中刷新tableView,这种写法是一个比较好的方式,但是我们有时候会有失误的时候,什么情况呢?我来说说自己的失误吧,我的代码这样写,[self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];然后就悲剧了,这样的写法肯定会导致程序挂掉,后来我发现了错误的原因,我只是习惯性的把此reloadData当做了tableView的reloadData,所以产生了错误。我们可以这样改正,

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];(第二种写法)

这样就明确的指定了在主线程中执行self.tableView的reloadData方法了。但是我还是推荐第一种写法,即

[self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:YES];

- (void)refreshTableView

{

    [self.tableView reloadData];

}

因为这样你写的代码行数多啊,说明你的工作量大啊。哈哈开玩笑的,这种写法我觉得更加直观一点吧。

任何一个NSOjbect子类都可以调用-performSelectorOnMainThread:withObject:waitUntilDone方法,比如数组对象array,可以这样调用该方法,

//下面的代码正确性我不能保证,小伙伴们可以试试看

[array performSelectorOnMainThread:@selector(removeAllObjects) withObject:nil waitUntilDone:YES];

只是没有必要,所以很少见到罢了。

我建了一个iOS交流群188647173,欢迎各位前来交流学习,分享码农经验。最近群的人数一直上不去,我甚是捉急,读者朋友们顶起啊。

共有 人打赏支持
粉丝 185
博文 53
码字总数 49671
×
召唤攻城狮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: