Delegate/Block/NSNotification与多线程

Delegate/Block/NSNotification是最常用的事件同步方法,各自特点、区别、使用方法就不赘述了。

下面主要想强调一下再多线程中使用Delegate/Block/NSNotification的注意事项。

开发时Delegate的调用方法、Block的调用方法、NSNotification的post方法都可能会在非主线程中调用,此时Delegate/Block/NSNotification的回调方法也将被这个非主线程调用,尤其是Delegate的实现方法很少有人会考虑内部的多线程实现,比如更新UI。由于Delegate/Block/NSNotification可能同时在主线程和非主线程中使用,所以实现时必须同时考虑两种情况。例如更新UI的部分需要写成下面的样子:

dispatch_async(dispatch_get_main_queue(),^{

UIButton *button =  [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 100, 44)];

[self.view addSubview:button];

[button release];

});

如果很不幸写成了

dispatch_sync(dispatch_get_main_queue(),^{

UIButton *button =  [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 100, 44)];

[self.view addSubview:button];

[button release];

});

那么在主线程调用的时候就完了。。。没有然后了。。。

如果是大型项目你真心不知道别人会干嘛。。。

如果是小型项目你怎么知道以后不会发展成大项目。。。

所以还是注意点吧!

时间: 2024-12-15 06:50:37

Delegate/Block/NSNotification与多线程的相关文章

ios delegate, block, NSNotification用法

ios中实现callback可以通过两种方法,委托和NSNotification 委托的话是一对一的关系,例如一个UIViewController里有一个tableView, 将该viewController设置为tableView的委托,tableView执行的时候调用委托的函数,同时可能需要得到反馈,比如tableView通过调用delegate中rowsOfSections函数来得到该tableView的行数,调用委托函数的时候也可能不需要反馈,例如UIApplication的在AppDe

delegate kvo nsnotification

1.delegate比nsnotification效率高. 2. delegate方法比notification更加直接,最典型的特征是, KVO和NSNotification的区别: 和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值:2)delegate只是一对一,而这两个可以一对多.这两者也有各自的特点. 1)KVO的使用: 被观察者发出  addObserver:

ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别

一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能.例如想在A的功能要在B中实现,可以在A中定义一个Protocol. protocol用法: @interface ClassA :ClassB<protocol1, protocol2> 1.首先声明一个UIView类: @interface myView  :UIView{  } @end: 2

精通IOS开发-block使用与多线程

Block Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多 #include<stdio.h> int sum(int a,int b) { return a + b; } int main() { NSLog(@"%d",sum(5,6)); //如何定义block //void (^myblock) ()

iOS 中KVC、KVO、NSNotification、delegate 总结及区别

iOS 中KVC.KVO.NSNotification.delegate 总结及区别 1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的关键技术之一. Demo: @interface myPerson : NSObject { NSString*_name; int      _age; int      _height; int      _w

(转)NSNotification、delegate和KVO的区别

1.效率肯定是delegate比nsnotification高. 2. delegate方法比notification更加直接,最典型的特征是, KVO和NSNotification的区别: 和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值:2)delegate只是一对一,而这两个可以一对多.这两者也有各自的特点. 1)KVO的使用: 被观察者发出  addObserv

iOS 中KVC、KVO、NSNotification、delegate 总结及区别-b

1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的关键技术之一. Demo: @interface myPerson : NSObject { NSString*_name; int      _age; int      _height; int      _weight; } @end @interface testViewController

KVC、KVO、NSNotification、delegate 的区别,对公司新人的解答

delegate 的 优势 : 1.非常严格的语法.所有将听到的事件必须是在delegate协议中有清晰的定义. 2.如果delegate中的一个方法没有实现那么就会出现编译警告/错误 3.协议必须在controller的作用域范围内定义 4.在一个应用中的控制流程是可跟踪的并且是可识别的: 5.在一个控制器中可以定义定义多个不同的协议,每个协议有不同的delegates 6.没有第三方对象要求保持/监视通信过程. 7.能够接收调用的协议方法的返回值.这意味着delegate能够提供反馈信息给c

iOS 传值 委托(delegate)和block 对比

 技术交流新QQ群:414971585 这篇文章建议和前一篇一起看, 另外先弄清楚IOS的block是神马东东. 委托和block是IOS上实现回调的两种机制.Block基本可以代替委托的功能,而且实现起来比较简洁,比较推荐能用block的地方不要用委托. 本篇的demo和前一篇是同一个,可以到github上下载不同的版本, 源码下载地址: https://github.com/pony-maggie/DelegateDemo A类(timeControl类)的头文件先要定义block,代码如下