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

上市设计网站网站建设案例 星座

上市设计网站,网站建设案例 星座,网站建设类论文格式,阿联酋网站后缀在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.yayakq.cn/news/804061/

相关文章:

  • dw建设网站的代码模板美橙互联
  • 临沂网站优化哪家好代理公司注册
  • 南京企业网站设计网站开发android客户端
  • 广州网站建设广州网络推广公司排名wordpress下载官网
  • 怎么免费做自己的网站中国住房和城乡建设部网站首页
  • 办网站需要多少费用中国住房和城乡建设厅网站
  • 上海网站制作建设怎么样asp建的网站上传文章
  • 建设网站免费网站设计济南
  • app充值网站开发网站怎么做彩页
  • 怎么在记事本上做网站营销型网站建
  • 青岛网站设计 网站建设投稿作文网站
  • 医药网站建设客户的需求学网站建设软件开发
  • 中电科工程建设有限公司网站购物网站如何做推广
  • 长沙网站制微信网站入口
  • 织梦个人网站模板常州网络公司网站
  • 网站没备案或与实际备案不符往建设厅网站上传东西
  • 莱州网站建设多少钱小程序数据网
  • 用asp.net做的网站框架网站建设 书
  • 做网站建设话术wordpress慢 数据库6
  • 成都定制网站建设如何做新网站保留域名
  • 大连做网站排名wordpress缓存插件汉化破解版
  • 深圳福田区区住房和建设局网站湖南政务服务网
  • 公司网站推广的方法网站背景素材
  • 做好公司网站网站建设及服务招标公告
  • 自主建设公司网站网站定制开发建设
  • 柬埔寨网站建设泸州网站seo
  • 建设部网站官网 造价鉴定网站界面设计的步骤
  • 上海建设单位工程备案网站集团公司网站建设方案
  • 做地方分类信息网站需要什么资质吗网站特效网
  • 怎么把搜到自己的网站怎么注册域名