iOS开发技巧-performSelectorOnMainThread的一些细节

 在iOS编码过程中,我经常使用[selfperformSelectorOnMainThread: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开发技巧-performSelectorOnMainThread的一些细节)