关于cocoa编程模块间协作的一点总结(delegate/T-A/notification/...)
来源:互联网 发布:b站网络视听许可证 编辑:程序博客网 时间:2024/05/17 01:12
http://www.cocoachina.com/bbs/read.php?tid-29170-page-1.html
在cocoa编程中,我们经常会遇到delegate、Target-Action、notification等等这些方法,我觉得从某种角度看,可以将这些方法总结在一起,它们就是为不同模块间提供协作的方法,这种协作在这里我把它理解为是“回调”,其实"回调"二字在这里更多是借用,并没有认真地去考究过这些正是一堆回调函数,纯粹是觉得挺像,感觉用来说明问题挺方便,所以就借用一下,应用层我们常见的"回调"就有以下几类:
第一:当然是如雷贯耳的delegate,这个没什么好说的,教程和文档说得够权威仔细了,它主要在"父子"实例中会常被用到;
第二:这种方式比较常见,但却未必会想到它其实也可以理解为是一种“回调”,这就是Target-Action模式;
第三:最任劳任怨的NSNotificationCenter,它以你最舒服的方式提供很令你满意的服务,它有三个关键词比较重要,observer、sender和name,observer就是notification的接受者,在"注册method"中会碰到它,经常是self,我也建议是这样,自己的notification就应该自己去注册,sender在设置"发送method"中(postNotificationName:object:和postNotificationName:object:userInfo:)的object参数时会见到,这个参数非常重要,它直接影响对NSNotificationCenter 使用的质量,sender是什么意思,就是notification的"签名",当在注册method中我们可以指定仅接受哪个sender的notification,那么center就是靠"发送method"时的object这个参数所传的"签名"来决定怎么发的,name比较简单,相当于标题,observer可以而且必须指定接受哪些name的notification,不同name其含义自然不同,在关系比较远的模块间,NSNotificationCenter很实用;
第四:KVO(Key-Value Observing),这个用得比较少,当B模块对A模块的属性状态感兴趣时,可以使用这种方法,参考文档:Key-Value Observing Quick Start;
第五:一个例子就明白了,它其实就是直接将一个对象的指针和方法作为参数传给另一个对像,让另一个对象来调用自己,就是这一句:UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
#pragma mark -#pragma mark UIImagePickerController delegate- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)Info { UIImage *originalImage = [Info objectForKey:UIImagePickerControllerOriginalImage]; if(nil != originalImage) { UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); } ... }
- (void) image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { ...}
- 关于cocoa编程模块间协作的一点总结(delegate/T-A/notification/...)
- 关于cocoa编程模块间协作的一点总结(delegate/T-A/notification/...)
- [Cocoa]TextField delegate and notification
- delegate、notification、KVO的使用场景总结
- 关于linux串口编程的一点总结
- 菜鸟编程 关于函数的一点总结
- 关于Notification的一点愚见(PendingIntent工作流程)
- Cocoa Touch的三种类的交流方式-delegate、target和notification
- C#对象间的协作和信息交换(五)利用委托(Delegate)广播消息
- 关于cocoa编程的几本书
- 关于Dijkstra算法的一点总结(附题:HDU-1548 A strange lift)
- 关于c与汇编混合编程的一点总结
- 关于c与汇编混合编程的一点总结
- 关于c与汇编混合编程的一点总结
- 关于Groovy里面元编程(MetaProgramming)的一点总结
- delegate 与 notification 的区别
- delegate和Notification的区别
- delegate和Notification的区别
- 第5章 原型模式(Protype Pattern)
- AS2 点击转到新网页,并且执行网页中JS
- 计时器 每个一秒输出一次
- 第6章 创建型模式专题总结
- HDOJ Minimum Transport Cost
- 关于cocoa编程模块间协作的一点总结(delegate/T-A/notification/...)
- 导入xls或者cvs数据并处理重复数据+关系表数据
- 简单工厂模式例子
- Speex manul中文版
- 第7章 适配器模式(Adapter Pattern)
- 动态添加数据
- hdu 3072(强连通分量)
- Win32GDI 学习
- sql developer和sql server中关于&转义的不同