object-C 类之间的消息处理机制

原创 2012年11月21日 16:59:42

Object-C,有时候常常两个类之间需要进行通信。一个界面的信息可能会影响到其它的类。两个类之间需要交换某些信息。

那么Object-C中如何实现两个类之间信息的传递呢。

有一种简单的方法是设置属性,比如要把A类的信息传到B类去,则在B类定义属性来接收。即在push的时候,直接为B类的该属性赋值。这种方法适用于从一个界面push到另一个界面的传值,而且还是由前一个传到后一个。

下面介绍任意两个类之间的消息传递方式:消息转发和委托代理

1.消息转发

使用消息转发中心NSNotificationCenter

假设类A和类B需要通信,当B选择某一行时,A类界面信息需要发生改变

则在B类选择某行的时候,发送一个消息

 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:select,@"selectedInfo", nil];

[[NSNotificationCenter defaultCenter] postNotificationName:@"selected" object:self userInfo:dict];


然后在A类中,添加一个消息转发的入口,告诉receiver(A类)收到消息“selected”时

该派到哪处理。这个一般都加载viewDidLoad中

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onMsg:) name:@"selected" object:nil];


然后再定义入口函数,在入口函数里面处理该消息

入口函数一般格式:-(void) onMsg:(NSNotification *) notif

notif就携带了消息的信息。如消息的名字,传递的参数

 NSString *strMsg = [notif name]; //这个就可以获取消息名字

[notif userInfo] 里包含用户传递的信息,是一个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类,则使用代理调用代理函数


[delegate hasRecievedFromServer:[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 类结构分析

转自:http://husbandman.diandian.com/post/2012-08-17/40036035008
  • songhongri
  • songhongri
  • 2014年05月04日 18:20
  • 2962

Object-C中的类-类的声明

1.关键字命名:为了避免与已有的c,C++关键字冲突,ObjectC关键字都有@开始,如:@classs,@interface,@private,@try,@catch,@protocol等。 2...
  • a497785609
  • a497785609
  • 2014年02月12日 22:47
  • 5574

理解Windows消息处理机制

理解Windows消息处理机制         Windows操作系统维护一个系统消息队列,同时系统给每个GUI线程提供一个线程消息队列,鼠标、键盘事件由鼠标或键盘驱动程序封装成消息并把...
  • u014284565
  • u014284565
  • 2014年08月04日 23:17
  • 937

Object-C学习——类的静态成员

转自:http://mobile.51cto.com/iphone-282474.htm Objective-C中静态变量使用方法是本文要介绍的内容,Objective-C 支持全局...
  • blue_jjw
  • blue_jjw
  • 2013年06月24日 17:13
  • 4735

[Object-C语言随笔之三] 类的创建和实例化以及函数的添加和调用!

李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/himistudy/396.html 上一小节的随笔写了常用的...
  • xiaominghimi
  • xiaominghimi
  • 2011年06月30日 15:56
  • 15035

object-c学习创建类和方法

// // main.m // fist_class // // Created by wonders on 15/11/4. // Copyright (c) 2015年 wonders. ...
  • z83986976
  • z83986976
  • 2015年11月05日 18:57
  • 502

object-c 学习第二天(类对象和方法)

学习语言我是在官方的英语文档上,当然也有很多中文的文档也很不错,可是我懒得找了,这个是官方的链接https://developer.apple.com/library/mac/#referenceli...
  • zc55803903
  • zc55803903
  • 2012年08月06日 12:54
  • 4655

Object-C学习笔记(二)-----对象的创建和类方法的调用

既学习笔记一  helloworld项目, 在当前项目所在的xcode中,按 command+N ,出现一个创建类的向导:如图 创建一个oc 类, 选择其父类为NSObje...
  • abc13939746593
  • abc13939746593
  • 2013年04月04日 12:00
  • 1296

object-c基础-创建类和对象

1、创建类 1.1、新建Single View app 模版项目,按Command + N 新建文件,创建类Student ,继承与NSObject 1.2、生成stu...
  • GuoGrower
  • GuoGrower
  • 2017年03月19日 15:08
  • 808

object-c中类的定义

分为接口部分和实现部分: 关于借口部分,以.h结尾的文件 @interface MyClass :NSObject{ int _count; id _data; NSString* _nam...
  • shb2058
  • shb2058
  • 2016年05月18日 13:48
  • 110
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:object-C 类之间的消息处理机制
举报原因:
原因补充:

(最多只允许输入30个字)