当前位置: 首页 > news >正文

更换wordpress语言seo168小视频

更换wordpress语言,seo168小视频,可信网站认证必须做吗,广州专业的网站制作在iOS 里面,项目打开就会运行一个主线程,所有的UI都在主线程里进行.其他网络请求或者耗时操作理论上也可以在主线程运行,但是如果太耗时,那么就会影响主线程其他UI.所以需要开字线程来进行耗时操作,子线程进行完耗时操作之后,如果项目需求有需要刷新UI,或者改变UI,一定得回到主…

在iOS 里面,项目打开就会运行一个主线程,所有的UI都在主线程里进行.其他网络请求或者耗时操作理论上也可以在主线程运行,但是如果太耗时,那么就会影响主线程其他UI.所以需要开字线程来进行耗时操作,子线程进行完耗时操作之后,如果项目需求有需要刷新UI,或者改变UI,一定得回到主线程进行修改/刷新.

下面介绍三种iOS里线程模式

前情提要:在View上创建一个UILabel, 点击屏幕空白处开启一个子线程,在子线程里模拟耗时操作,耗时操作完毕后需要改变UILabel上的文字.

- (void)viewDidLoad 
{[super viewDidLoad];self.markLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 200, 300, 40)];self.markLabel.backgroundColor = [UIColor greenColor];self.markLabel.textAlignment = NSTextAlignmentCenter;self.markLabel.text = @"子线程开启之前的String";[self.view addSubview:self.markLabel];
}

1.NSThread

1.1. 点击空白页面,开启线程(先模拟不在主线程刷新UI的错误写法)

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{//模拟线程耗时操作,并在耗时操作后改变label的String[self threadModel];
}- (void)threadModel
{NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadUpdateUI) object:nil];[thread start];
}- (void)threadUpdateUI
{//模拟耗时操作[NSThread sleepForTimeInterval:2];//耗时操作后直接刷新UI (这是模拟错误的方法)self.markLabel.text = @"修改后的Sting"; 
}

按照以上的写法,直接报错,报错提示如下图所示: 

must be used from main thread only : 一定且只有从主线程刷新

因此可知,需要进入主线程去刷新,那么NSTread模式怎么进入主线程呢? 看下面的代码

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{//模拟线程耗时操作,并在耗时操作后改变label的String[self threadModel];
}- (void)threadModel
{NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadUpdateUI) object:nil];[thread start];
}- (void)threadUpdateUI
{//模拟耗时操作[NSThread sleepForTimeInterval:2];//NSThread 找到主线程[self performSelectorOnMainThread:@selector(uodateMainUI) withObject:nil waitUntilDone:NO];}- (void)uodateMainUI
{self.markLabel.text = @"修改后的Sting";
}

以上是NSThread 找到主线程,并且刷新UI的方法.

接下来介绍CGD和NSOperation 找到主线程的方法

2.CGD

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{//模拟线程耗时操作,并在耗时操作后改变label的String[self CGDModel];
}- (void)CGDModel
{//队列dispatch_queue_t queue = dispatch_get_global_queue(0, 0);/*我这里使用global_queue来模拟,你也可以使用并发队列/串行队列模拟dispatch_queue_t queue = dispatch_queue_create(@"并发队列", DISPATCH_QUEUE_CONCURRENT);dispatch_queue_t queue = dispatch_queue_create(@"串行队列", DISPATCH_QUEUE_SERIAL);但是不能用主队列来模拟,因为主队列本身就有主线程*///任务dispatch_async(queue, ^{//模拟耗时操作[NSThread sleepForTimeInterval:2];//CGD模式回到主线程,因为CGD和NSOperation只有任务和队列的概念,所以主队列就是主线程dispatch_async(dispatch_get_main_queue(), ^{self.markLabel.text = @"修改后的Sting";});});
}

3.NSOperation

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{//模拟线程耗时操作,并在耗时操作后改变label的String[self operationModel];
}- (void)operationModel
{//队列NSOperationQueue * queue = [[NSOperationQueue alloc]init];//任务[queue addOperationWithBlock:^{//模拟耗时操作[NSThread sleepForTimeInterval:2];//找到主队列(NSOperation只有任务和队列的概念,所以主队列就是主线程)[NSOperationQueue.mainQueue addOperationWithBlock:^{self.markLabel.text = @"修改后的Sting";}];}];
}

http://www.ds6.com.cn/news/87940.html

相关文章:

  • 做动漫网站要多少钱营销型公司网站建设
  • 做网站的公司周年活动临沂seo网站管理
  • 企业宣传类网站建设电商网站建设步骤
  • 网络营销与策划机考答案李飞seo
  • 网站建设和平面设计如何做网络推广赚钱
  • 外贸商城网站制作公司媒体资源网
  • 石家庄电商网站排名高质量网站外链平台
  • wordpress空间服务商seo查询外链
  • c#网站开发 pdf推广公司好做吗
  • 如果快速做网站企业建站平台
  • 网站开发女软文写作公司
  • wordpress图床插件青岛seo网站管理
  • 网站视频模块配置参数如何搭建一个网站
  • 礼品网站模板成都百度推广公司联系电话
  • 专门做网站的公司与外包公司有哪些企业品牌营销推广
  • 蓝鸟E4A做网站程序软文平台
  • 网站超市安装磁力宝
  • wordpress 会员 返佣windows优化大师最新版本
  • wordpress单页主题汉化云南seo
  • php动态网站开发课程设计温州seo
  • 江西泰飞建设有限公司网站东莞百度快速排名优化
  • 做网站 绑定域名优化大师的作用
  • wordpress选择模板没win10优化
  • 什么网站可以做头像网址链接查询
  • 腾讯云服务器做网站可以吗佛山企业用seo策略
  • 专业网站建设知识网站运营培训
  • 阿里云做视频网站可以吗网络推广员
  • 公司建设网站首页如何使用免费b站推广网站
  • 深圳做网站开发谷歌搜索引擎
  • 做网站用什么配资电脑企业网站建设方案范文