iOS中涉及到的几种通信方式-持续更新中~~~~

单例,通知,KVO, 代理协议
单例:创建一个单独的类,用来存储要传递的值。只创建一次的类对象,在该类中进行设定,使其只创建一次。

UserInfo.h:

static userInfo *userInfo = nil

@implementation UserInfo

//method 1
+ (UserInfo *)shareInfo
{
if(userInfo == nil)
{
userInfo = [self alloc] init];
}
return userInfo;
}

//method 2 gcd创建单例
+ (UserInfo *)shareInfo_GCD
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
userInfo = [[self alloc] init];
});
return userInfo;
}

@end

2.通知
[NSNotificationCenter defaultCenter];//通知中心
发送通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@“valueChange” object:nil];
object为可传递的参数,利用其传递参数,对象


添加监听,在接受方法中
[NSNotificationCenter defaultCenter] addObserver:self selector(@selector(nameAndPwd:) name:@“valueChange” object:nil];

- (void)nameAndPwd:(NSNotification *)notification
{
NSDictionary *dic = notification.object;//获取传递过来的参数
….
}

移除通知
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

KVO模式—Key Value Observer

通过set方法赋值才能触发,直接赋值不会触发,如_qqnumber = 333;不会触发;
self.qqnumber = 333,会触发。

reg = [[RegistViewController alloc] init];// 写到init方法中,使reg只创建一次。

[reg addObserver:self forKeyPath:@“passWord” options:NSKeyValueObservingOptionNew content:NULL];

- (void)observeValueForKeyPath:(NSString *)KeyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context//系统提供的方法

KeyPath:监听的属性名
object:监听的对象
change:监听属性的值
context:添加监听时传来的值

{
if([KeyPath isEqualToString:@“qqNumber”]){
NSString *userInfo = [change objectForKey:@“new”;//获取新值
}
}

KVC—Key_Value_Coding,键值编码,用于修改属性的值,如果属性是有对应的set方法,那么会优先调用set方法,如果没有,会强行赋值
[self setValue:qqText forKey:@“…”];

添加移除方法
- (void)dealloc
{
[reg removeObserve
}

kvo是主动监听,而notification是被动接受被监听者发送过来到通知。

kvo的话,可以监听多个属性。

通知在任何地方都可以接受通知发送过来到消息。

通知不涉及具体的类。

kvo > delegate > notification > 单例

协议:自己定义的协议,别人来实现,代理对象。

在代理文件中
在这里面 实现代理中的方法
registerView *reg =[ [registerView alloc] init];
reg.delegate = self;
一定是     xxx.delegate = self;    的形式

在主文件中
在这里面 声明需要实现的方法
@protocol …

@end

@property ..id <registerDelegate> delegate;

典型函数

if([self.delegate respondsToSelector:@selector(registerQQNumber:withPassWord:)])
{
[self.delegate registQQNumber:qqText withPassWord:passText];//该步会去调用代理中实现的协议方法,这一步相当于去向代理对象中实现参数的传递。
}

[self.delegate …//协议中的函数];//让self.delegate去实现代理方法

if([object isKindOfClass:[PosterCollectionView class])

创建indexPath位置
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:..];





























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值