首页 > 代码库 > 【OC学习-34】通知NSNotification,类似于KVO,用于对象之间监听然后发通知提醒
【OC学习-34】通知NSNotification,类似于KVO,用于对象之间监听然后发通知提醒
通知其实和KVO类似,就是先在类A中设置通知,然后再类B中设置个监听这个通知的方法,当然可以通过这个通知方法可以传递一些参数,得到这个参数之后,一般是触发一个动作,此处举例就是触发输出一些内容而已。
(1)在Child类中初始化一个实例变量为100,每次递减2,当小于90时候触发通知。
//Child.h #import <Foundation/Foundation.h> @interface Child : NSObject @property(nonatomic,assign)NSInteger sleep; @end
//Child.m #import "Child.h" @implementation Child -(id)init{ self=[super init]; if (self!=nil) { _sleep=100; //初始化为100 [NSTimer timerWithTimeInterval:1 target:self selector:@selector(action:) userInfo:nil repeats:YES]; //设置一个定时器,把sleep递减 } return self; } //下面就是递减的函数 -(void)action:(NSTimer *)timer{ _sleep-=2; //当满足条件时,触发通知 if (_sleep<90) { //设置的通知,名字叫helloname,object是一些参数,有时候发通知可能要随带的参数 [[NSNotificationCenter defaultCenter]postNotificationName:@"helloname" object:[NSNumber numberWithInteger:_sleep]]; [timer invalidate];//小于的时候通过发出去后停止这个定时器 } } @end
(2)在类Parent中设置监听通知,如果监测到,则触发action方法定义的输出。
//Parent.m #import "Parent.h" #import "Child.h" @implementation Parent -(id)init{ self=[super init]; if (self!=nil) { //添加一个通知的监听 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(wakeMove:) name:@"helloname" object:nil]; } return self; } -(void)wakeMove:(NSNotification *)notice{ //你也可以把Child设置通知那里增加一个参数userInfo:dic后面跟一个字典或者什么,然后通过notice.userInfo传递过来输出一样可以 NSNumber *num1=notice.object; //把在Child里定义通知时候的那个object传递过来 NSLog(@"hold on the baby,%@",num1); } @end
(3)main.m
#import <Foundation/Foundation.h> #import "Child.h" #import "Parent.h" int main(int argc, const char * argv[]) { @autoreleasepool { Child *child1=[[Child alloc]init]; Parent *parent1=[[Parent alloc]init]; [[NSRunLoop currentRunLoop]run]; } return 0; }
这个,呃,输出结果出现问题,但原因还不甚明了。
主要了解一下通知的概念以及用法,其实和KVO的思想类似。
这在项目开发中会用到。
【OC学习-34】通知NSNotification,类似于KVO,用于对象之间监听然后发通知提醒
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。