当前位置: 首页 > 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.tj-hxxt.cn/news/92438.html

相关文章:

  • 1000套网站源码网站宣传推广方案
  • 国外做化学申报的网站黄页88网络营销宝典
  • 云南省玉溪市江川区住房和城乡建设局网站百度快速排名软件下载
  • 电子商务网站的数据库怎么做国家高新技术企业
  • 龙华民治网站建设公司网店推广策划方案
  • WordPress登录不进上海好的seo公司
  • 做网站优化的注意事项广告公司图片
  • 医药网站如何做网络推广教育培训机构报名
  • 上海网站群建设优化模型的推广
  • 高端网站设计高端网站制作友情链接检测方法
  • 云南网站建设快速排名刷外链
  • 福田公司领导班子名单沈阳seo关键字优化
  • 上海的网络推广电商seo与sem是什么
  • wordpress用户注册免邮箱免费优化网站排名
  • 杭州网页设计公司排名湘潭seo培训
  • 景县网站建设全网营销系统怎么样
  • app网站开发报价今天发生的重大新闻
  • 网站的动画效果代码大全海外互联网推广平台
  • 新注册域名做网站好处宝塔建站系统
  • .东莞网站建设网站权重如何查询
  • 网站内链有什么用网络营销与策划
  • 免费虚拟空间wordpress广州网站优化排名
  • 淘宝客做动态广告的网站西安seo服务商
  • 做建材的网站寰宇seo
  • 织梦网站数据库备份文件夹长沙靠谱关键词优化服务
  • wordpress生成手机端广州网站优化服务商
  • 网站小样用什么做百度广告代理
  • 上海城乡住房建设部网站首页排行榜软件
  • 服饰商城网站建设seo查询网站是什么
  • 网站个人备案模版网络建站流程