object-C 类之间的消息处理机制
来源:互联网 发布:淘宝一件代发发货地址 编辑:程序博客网 时间:2024/05/02 05:42
Object-C,有时候常常两个类之间需要进行通信。一个界面的信息可能会影响到其它的类。两个类之间需要交换某些信息。
那么Object-C中如何实现两个类之间信息的传递呢。
有一种简单的方法是设置属性,比如要把A类的信息传到B类去,则在B类定义属性来接收。即在push的时候,直接为B类的该属性赋值。这种方法适用于从一个界面push到另一个界面的传值,而且还是由前一个传到后一个。
下面介绍任意两个类之间的消息传递方式:消息转发和委托代理
1.消息转发
使用消息转发中心NSNotificationCenter
假设类A和类B需要通信,当B选择某一行时,A类界面信息需要发生改变
则在B类选择某行的时候,发送一个消息
NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:select,@"selectedInfo",nil];
[[NSNotificationCenterdefaultCenter] postNotificationName:@"selected"object:selfuserInfo:dict];
然后在A类中,添加一个消息转发的入口,告诉receiver(A类)收到消息“selected”时
该派到哪处理。这个一般都加载viewDidLoad中
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(onMsg:)name:@"selected"object:nil];
然后再定义入口函数,在入口函数里面处理该消息
入口函数一般格式:-(void) onMsg:(NSNotification *) notif
notif就携带了消息的信息。如消息的名字,传递的参数
NSString *strMsg = [notifname]; //这个就可以获取消息名字
[notifuserInfo]里包含用户传递的信息,是一个Dictionary,根据如何传的相应的取。注意传和取保持一致。
2.委托代理
代理看上去似乎麻烦一点点,不过也还好。平常我们也经常用到苹果自带的代理delegate。相信大家都不陌生。那么自己如何实现代理呢?
假设A类接收到某个信息,需要将这些信息传给B类需要更新或处理某些信息
首先在A类中声明一个协议,继承NSObject,协议中有一个函数,即代理函数
可以设置多个,还可以设置是可选的还是必须的。默认都是可选的
@protocol ListenServerDelegate <NSObject>
-(void) hasRecievedFromServer:(NSString *)msg;
@end
然后在A类的成员变量中声明这个变量,再把它定义成属性
@interface A :UIViewController
{
id<ListenServerDelegate> delegate;
}
@property (assign,nonatomic) id<ListenServerDelegate> delegate;
然后当A类接收到某个信息时,需要触发到B类,则使用代理调用代理函数
[delegatehasRecievedFromServer:[NSString stringWithUTF8String:strReadMsg.c_str()]];
然后B类需要实现代理ListenServerDelegate的代理函数
@interface B :UIViewController<ListenServerDelegate>
在B类中声明A类成员变量,设置A的委托对象为B。即当A收到某个消息时,将信息传给B,委托B来处理
A a;
a.delegate = self;
在B类的.m文件里实现代理函数
-(void) hasRecievedFromServer:(NSString *)msg
{
。。。。。。
过程
}
代理函数形式可以根据自己的需要随意定义。
一般是函数名,然后将A类中要传给B的参数列表
- object-C 类之间的消息处理机制
- Object - C 的消息处理机制与 Method Swizzling(函数混淆)
- Object - C 的消息处理机制与 Method Swizzling(函数混淆)
- object-c的异常处理机制
- object-c的异常处理机制
- object-c的异常处理机制
- object-c的异常处理机制
- object-c的异常处理机制
- Object-C的函数调用机制详解--消息
- 【转】Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Android消息处理机制---Looper、Handler、Message之间的关系
- 两个类之间的消息机制
- Object类、JAVA的异常处理机制
- Object-C 消息机制工作原理
- u-boot中uart调试口初始化代码
- vs2010中生成的工程文件哪些可以删除
- C#序列化成XML注意事项
- Matlab中filter、conv、impz函数的区别
- 调整office的默认字体大小
- object-C 类之间的消息处理机制
- 文章1:HTTP协议中长连接、短连接
- VC 6.0在win7下无法加入ActiveX控件的解决方案
- 新手解疑:Tomcat版本问题
- LPTSTR、LPCSTR、LPCTSTR、LPSTR的来源及意义
- UIDatePicker 日期/时间选取器(滚轮)
- C++打印曲线
- 算法——递归生成集合的所有组合
- jsp form 表单或超链接传参数中文乱码问题小结