【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的思想类似。

这在项目开发中会用到。

时间: 2024-10-22 07:58:14

【OC学习-34】通知NSNotification,类似于KVO,用于对象之间监听然后发通知提醒的相关文章

(转载)OC学习篇之---KVC和KVO操作

前一篇文章我们介绍了OC中最常用的文件操作,那么今天来看一下OC中的一个比较有特色的知识点:KVC和KVO 一.KVC操作 OC中的KVC操作就和Java中使用反射机制去访问类的private权限的变量,很暴力的,这样做就会破坏类的封装性,本来类中的的private权限就是不希望外界去访问的,但是我们这样去操作,就会反其道而行,但是我们有时候真的需要去这样做,哎.所以说有些事不是都是顺其自然的,而是需要的时候自然就诞生了. 下面就来看一下这种技术的使用: Dog.h 1 // 2 // Dog.

通知NSNotification和KVO的使用

1.通知NSNotification的使用NSNotification的名称在整个项目中必须是唯一的补充一个小知识,为了确保通知名称的唯一性,定义NSNotification的name时需要做些改变前边定义时如下 #define AnyNotificationName @"notiName" 最好写成 1 NSString * const AnyNotificationName = @"notiName"; 2 //也可写成下面的方式,这是等价的.可以通过打印内存地

OC学习篇之---KVC和KVO操作

前一篇文章我们介绍了OC中最常用的文件操作:http://blog.csdn.net/jiangwei0910410003/article/details/41875015,那么今天来看一下OC中的一个比较有特色的知识点:KVC和KVO 一.KVC操作 OC中的KVC操作就和Java中使用反射机制去访问类的private权限的变量,很暴力的,这样做就会破坏类的封装性,本来类中的的private权限就是不希望外界去访问的,但是我们这样去操作,就会反其道而行,但是我们有时候真的需要去这样做,哎.所以

【OC学习-7】2种常用的对象初始化方法以及方法的具体写法

我们在创建一个新的对象时,用到初始化,但由于这个初始化函数没有特别编写,所以没什么效果,现在我们就来看看这个初始化函数怎么书写. 如果没有经过我们自己的初始化函数赋值的话,那么一般在创建一个对象后,会一个个赋值,如下: #import <Foundation/Foundation.h> #import "ASStudent.h" int main(int argc, const char * argv[]) { @autoreleasepool { ASStudent *

【OC学习-15】如何判断两个对象是否属于同一个类?如何判断一个对象是否属于某一个类?

每个对象都有一个isa,这个isa里面储存了很多关于类对象的一些信息,所以当这个对象编译的时候,程序会通过isa来查看这个对象的类型,即执行的时候再识别叫动态类型识别.而且这个对象里面的方法其实是被封装在SEL里面(有方法ID和内容),当外面利用方法传递消息的时候,先把这个方法ID化,然后找相同ID的方法,找到了就调用,找不到就通过isa里存储的信息往父类找,最终找不到,就报错.(相同的方法签名=相同的ID) (1)每个对象都可以调用类对象,如果它们是一个类出来的,它们的类对象也是一样的,所以判

OC学习篇之---总结和学习目录

今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请OC老鸟来喷~~ 1.OC学习篇之---概述 2.OC学习篇之---第一个程序HelloWorld 3.OC学习篇之---类的定义 4.OC学习篇之---类的初始化方法和点语法的使用 5.OC学习篇之---类的三大特性(封装,继承,多态) 6.OC学习篇之[email protected]关键

ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别

一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能.例如想在A的功能要在B中实现,可以在A中定义一个Protocol. protocol用法: @interface ClassA :ClassB<protocol1, protocol2> 1.首先声明一个UIView类: @interface myView  :UIView{  } @end: 2

IOS中的通知NSNotification

类似于Android中的广播接收者发送者 1.一般完整的通知包含三个属性 1 -(NSString *)name ;//通知的名称 2 -(id)object ;//通知发布者(是谁要发布通知) 3 -(NSDictionary *)userInfo;//一些额外的信息(通知发布者传递给通知接收者的信息内容) 2.初始化一个通知(NSnotification)对象 1 +(instancetype)notificationWithName:(NSString *)aName object:(id

oc学习之路----QQ聊天界面

用到的技术:自定义cell,通知机制,代理模式 transform 1.自定义cell(通过代码自定义cell) ①首先新建一个类继承UITableViewCell ②重写initWithStyle:reuseIdentifier方法 这里只需要把所有要显示的子控件添加到contenView中,在这一步一般不需要设置属性的, 但是如果是一些子控件中一些静态的属性,字需要一次性设置的话,就在这里 设置,在重写frameSet方法的时候在把一些比较动态的数据填充上去以及设置 每个子控件的frame