详解关于Cocoa编程模块间协作

移动开发 iOS
Cocoa编程模块间协作是本文要介绍的内容,在cocoa编程中,我们经常会遇到delegate、Target-Action、notification等等这些方法,来看详细内容。

Cocoa编程模块间协作是本文要介绍的内容,在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;

第五:一个例子就明白了,它其实就是直接将一个对象的指针和方法作为参数传给另一个对像,让另一个对象来调用自己,就是这一句:

  1. UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);  
  2. #pragma mark -  
  3. #pragma mark UIImagePickerController delegate  
  4. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)Info {      
  5.       
  6.     UIImage *originalImage = [Info objectForKey:UIImagePickerControllerOriginalImage];  
  7.     if(nil != originalImage)  
  8.     {  
  9.          UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);  
  10.     }  
  11.         ...  
  12. }  
  13.  
  14. - (void) image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {  
  15.     ...  

小结:详解关于Cocoa编程模块间协作的内容介绍完了,以上就是我的一点小小的总结,这些方法在模块间的协作可能会经常使用到的,希望对开始学习cocoa编程的朋友有所帮助!

责任编辑:zhaolei 来源: 博客园
相关推荐

2011-07-08 18:03:30

Cocoa Touch 网络

2011-08-10 18:37:32

CocoaMac OS X

2023-06-08 08:21:08

多线程编程线程间通信

2011-08-10 18:47:18

Cocoa字符串

2011-08-03 10:24:22

Cocoa Touch 静态库

2022-11-13 15:48:19

编程线程GPU

2011-07-22 15:50:06

Cocoa MVC 视图

2017-05-18 10:23:55

模块化开发RequireJsJavascript

2011-08-15 14:27:51

CocoaRunLoop

2011-08-15 14:47:28

Cocoa嵌入资源文件

2011-08-02 13:58:18

Cocoa 框架 Mac OS

2011-07-26 15:29:36

Cocoa 模式

2011-07-28 16:52:34

Cocoa 框架 Mac Os

2015-12-30 10:29:40

Git协作流程详解

2021-06-03 08:55:58

面向协议编程

2021-06-04 09:01:27

Cocoa 协议编程 Swift

2010-07-12 13:20:18

UML协作图

2011-08-10 16:27:07

Cocoa TouchPlist

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-07-28 18:11:18

Objective-C Cocoa 编程
点赞
收藏

51CTO技术栈公众号