美文网首页
iOS 开发:代理+KVO+通知+Block

iOS 开发:代理+KVO+通知+Block

作者: iOS_SXH | 来源:发表于2017-02-05 09:07 被阅读0次

iOS 委托代理(delegate)

本质:我提供一个我自己的委托(方法)。你如果要使用我这个方法,确认代理(设置代理=self)就可以使用。

作用:

1:方法延续(引导页动画结束后跳转到主界面)(不需要带传递参数)

2:实现页面传值 ( TwoVc 传值给  OneVc )(有传递参数)

实现步骤

委托方

.h中

a.定义协议与方法

b.声明委托变量

.m中

a.设置代理

b.通过委托变量调用委托方法

代理方:

a.遵循协议

b.实现委托方法

例子详解

可以参考这个列子:联动效果实现

TwoViewController.h (引导页/传值页)

@protocol selfDelegate<NSObject>

- (void)passValue:(NSString *)values://带参数的方法

- (void)doSomethingDelegate//不带参数的方法

@end

@interface  TwoViewController : UIViewController  

@property (nonatomic, assign) id<selfDelegate>SelfDelegate;

@end

TwoViewController.m

//引导页消失的方法后面实现代理方法

if (self. SelfDelegate && [self. SelfDelegate respondsToSelector:@selector(doSomethingDelegate)])

{

     [self. SelfDelegate doSomethingDelegate];

}

AppDelegate.m

TwoViewController *guideview = [[TwoViewController alloc]init];

guideview.gotodelegate = self;//设置代理

- (void)doSomethingDelegate{

//实现代理方法:---->跳转到首页

带参数的传值同理:这里就不记录了

可以参考链接:代理参数传值


KVO传值

添加

[***(谁被观察-改变) addObserver:self forKeyPath:@"isEdit" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

移除

- (void)dealloc {

[*** removeObserver:self forKeyPath:@"isEdit"];

}

回调

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

if ([keyPath isEqualToString:@"isEdit"]) {

}

}


通知传值

<1>在我们需要时发送通知消息(发送:消息写在userInfo中)

NSDictionary *dic =@{@"num":[NSString stringWithFormat:@"%lu",(unsigned long)self.detailArray.count]};

[[NSNotificationCenter defaultCenter] postNotificationName:@"shoppingCarNum" object:nil userInfo:dic];

<2>我们在需要接收通知的地方注册观察者(注意移除)

获取通知中心单例对象。添加当前类对象为一个观察者,name和object设置为nil,表示接收一切通知

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

我们可以在回调的函数中取到userInfo内容,如下:

-(void)notice:(NSNotification *)notification{

self.label.text=[notification.userInfo objectForKey:@“1”];

}

消息发送完,要移除掉

- (void)dealloc  {

//移除所有通知

[[NSNotificationCenter defaultCenter] removeObserver:self];

//移除指定通知

[[NSNotificationCenter defaultCenter]removeObserver:self name:@"labelTextNotification" object:nil];

[super dealloc];

}


Block传值

<1>声明 cell.h

@property (nonatomic,copy)  void(^shopCartBlock)(UIImageView *imageView,NSInteger selectRow);

也可以这么写Block

typedef void (^SelfBlock)(UIImageView *imageView,NSInteger selectRow);

@property (nonatomic,copy) SelfBlock shopCartBlock;

<2>实现  cell.m

if (self.shopCartBlock) {

self.shopCartBlock(self.CommodityImage,path.row);

}

<3>调用  **.m

cell.shopCartBlock = ^(UIImageView *imageView,NSInteger selectRow) {   }

学无止境,做个记录

2017-02-5-SXH

相关文章

  • iOS 开发:代理+KVO+通知+Block

    iOS 委托代理(delegate) 本质:我提供一个我自己的委托(方法)。你如果要使用我这个方法,确认代理(设置...

  • ios开发之代理,block,通知

    ios开发中控制器与控制器之间的传值与联系,使用最多的是block,代理,通知.那么他们之间有什么区别以及怎么使用...

  • iOS 代理,通知,Block

    1. 三者的传值对应关系 通知是”一对多”的关系。 通知不能再进程间进行。 代理和Block通常是”一对一”的关系...

  • iOS开发基础:消息传递机制的不同与缺陷

    iOS中的消息传递机制有以下几种: 代理(Delegation) 通知(NSNotification) BLOCK...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • ObJective-C之利用Block逆向传值

    在iOS开发之通过代理逆向传值一文中,分析了利用代理模式来逆向传值,其实还有一些其他的方式,如通知、Block等,...

  • iOS开发之利用Block逆向传值

    在iOS开发之通过代理逆向传值一文中,分析了利用代理模式来逆向传值,其实还有一些其他的方式,如通知、Block等,...

  • iOS 常用传值方式

    总结 iOS 日常开发中的几种常用传值方式:正向传值代理传值block传值通知传值单例 文章代码:https://...

  • 关于iOS传值

    在iOS开发中有4中传值方式,分别为block、通知、代理、tag-action,四种方式各有优劣,在通常情况下,...

网友评论

      本文标题:iOS 开发:代理+KVO+通知+Block

      本文链接:https://www.haomeiwen.com/subject/tmlmbttx.html