IOS多线程开发之GCD

IOS多线程开发之GCD,第1张

概述     GCD全称为Grand Central Dispatch 在IOS4才开始,用来实现多线程。它是IOS多线程抽象层次最高的一层,下面还有更加轻量级的Cocoa operations,和Thread。      当看到GCD的使用我仿佛看到了Android中的Handler和AsynTask。 在主线程中任意方法中加入: dispatch_async(dispatch_get_ @H_419_4@

     GCD全称为Grand Central dispatch 在IOS4才开始,用来实现多线程。它是IOS多线程抽象层次最高的一层,下面还有更加轻量级的Cocoa operations,和Thread。

     当看到GCD的使用我仿佛看到了AndroID中的Handler和AsynTask。

在主线程中任意方法中加入:     dispatch_async(dispatch_get_gloabal_queue(0,0),^{		//加入耗时 *** 作		//......		dispatch_async(dispatch_get_main_queue(),^{			//更新UI *** 作			//.....		});    });	是否看到AndroID中Handler的影子? 首先需要在主线程中定义	private Handler mHandler = new Handler();	然后在子线程中使用	mHandler.post(){		public voID run() {			//更新UI *** 作		}	}	或者是:	在主线程中:	private Handler mHandler = new Handler() {		public voID handleMessage(Message msg) {			switch(msg.what) {				case 1:					....					break;			}		}			};	在子线程中:	Message message =  new Message();	message.what = 1;	mHandler.sendMessage(message);


dispatch_async(dispatch_get_main_queue(),^{.....});的作用是将代码块中的工作转回到主线程。

并发 *** 作:有很多没有关联的耗时 *** 作我们可以考虑使用并发 *** 作。GCD提供实现并发 *** 作的方法

	//因为不知是哪个线程先返回,故使用__block修饰变量来保存执行结果,确保在子线程中程序块内设置的值可供在以后得代码中使用。retain,是为了防止到程序最后变量已被释放,那就是白忙活了	__block Nsstring *firstResult;	__block Nsstring *secondResult;		//分发线程执行 *** 作	dispatch_group_async(group,dispatch_get_gloabal_queue(0,^{		firstResult = [[ ...] retain];	});		//分发线程执行 *** 作	dispatch_group_async(group,^{		secondResult = [[ ...] retain];	});		//该程序块在组中所有程序块即将执行完时执行	dispatch_group_notify(group,^{		//....		dispatch_async(dispatch_get_main_queue(),^{			//更新UI *** 作			//.....		});	});

在上面的代码中是否看到了AndroID中AsyncTask的影子?

    doInBackground(...){...}

    onPostExecute(....){...}

@H_419_4@ @H_419_4@ @H_419_4@ 总结

以上是内存溢出为你收集整理的IOS多线程开发之GCD全部内容,希望文章能够帮你解决IOS多线程开发之GCD所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1064843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存