通知的使用

Main.m

#import "Children.h"
#import "Nurse.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        Children *children = [[Children alloc] init];

        Nurse *nurse = [[Nurse alloc] initWithChildren:children];

        [[NSRunLoop currentRunLoop] run];

        [children release];
        [nurse release];

    }
    return 0;
}

Children.h

@interface Children : NSObject

@property(nonatomic,assign)NSInteger happyValue;    //欢乐值
@property(nonatomic,assign)NSInteger hungryValue;   //饥饿值

Children.m

- (id)init {

    self = [super init];

    if (self) {
        //开启定时器
        [NSTimer scheduledTimerWithTimeInterval:1
                                         target:self
                                       selector:@selector(timeAction:)
                                       userInfo:nil
                                        repeats:YES];
        _hungryValue = 100;
        _happyValue = 100;
    }

    return self;
}

- (void)timeAction:(NSTimer *)time {

    --_hungryValue;
    --_happyValue;

    NSLog(@"happyValue:%ld",_happyValue);

    if (_happyValue < 90) {
        //通知保姆
        //发送一个通知,通知名:happlyValueNotification
        [[NSNotificationCenter defaultCenter] postNotificationName:@"happlyValueNotification" object:self];

    }

    NSLog(@"hungryValue:%ld",_hungryValue);

    if (_hungryValue < 85) {
        //发送通知
        [[NSNotificationCenter defaultCenter] postNotificationName:@"hungryValueNotification" object:self];
    }

}

Nurse.h

@class Children;

@interface Nurse : NSObject {

    Children *_children;

}

- (id)initWithChildren:(Children *)children;

Nurse.m

#import "Children.h"

@implementation Nurse

- (id)initWithChildren:(Children *)children {

    self = [super init];

    if (self) {
        _children = [children retain];

        //接收通知,通知名:happlyValueNotification
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(happlyValueChange)
                                                     name:@"happlyValueNotification"
                                                   object:nil];

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

    }

    return self;
}

- (void)happlyValueChange {

    [self play];
}

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

    [self feed];

}

- (void)play {

    NSLog(@"保姆陪小孩玩耍");
    _children.happyValue = 100;

}

- (void)feed {

    NSLog(@"保姆给小孩晚饭");
    _children.hungryValue = 100;

}

- (void)dealloc {

    //移除通知
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"happlyValueNotification" object:nil];
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"hungryValueNotification" object:nil];

    //移除所有通知
    [[NSNotificationCenter defaultCenter] removeObserver:self];

    [_children release];

    [super dealloc];

}
时间: 2024-10-23 11:43:53

通知的使用的相关文章

IOS 本地通知

在苹果的Mac OSX 和IOS开发的API中有三个不同的"通知",包括:广播通知,本地通知和推送通知. 本地通知只是应用所在设备上给用户通知,而推送通知是远程通知,他是由远程服务器推送过来的 本节主要是讲的本地通知,虽然本地通知并没有任何的网络通信,但是他在编程方面与后面要介绍的推送通知非常相似.我们的例子中有三个按钮,"计划通知开始"按钮开启计划通知,他在10秒钟后到达."停止所有计划通知"按钮式停止和取消已经开始的计划通知."立刻

Spring的环绕通知

首先加入jar包: com.springsource.net.sf.cglib -2.2.0.jar com.springsource.org.aopalliance-1.0.0 .jar com.springsource.org.aspectj.weaver-1.6.8 .RELEASE.jar commons-logging-1.1.3. jar spring-aop-4.0.0.RELEASE.jar spring-aspects-4.0.0.RELEASE.jar spring-bean

iOS---代理与协议以及通知的使用

一.代理 1.代理的介绍 代理是一种通用的设计模式 代理使用方式:A 让 B 做件事,空口无凭,签个协议. 所以代理有三部分组成: 委托方: 定义协议 协议   : 用来规定代理方可以做什么,必须做什么 代理方: 按照协议完成委托方的需求 2. 协议的介绍 协议是定义了一套公用的接口,是方法的列表,但是无法实现. 可以通过代理,实现协议中的方法. 协议是公用方法,一般写在一个类里面. 如果多个类都使用这个协议,可以写成一个peotocol文件. 3.代理的使用 (1)委托某人做某事   先建立一

React native中的组建通知通信:

有这么一个需求,在B页面pop()回到A页面,需要A页面执行刷新,那么我们可以采用以下方法: 1:在A页面Push到B页面中,加上一个A页面中的刷新函数做为参数,然后在B页面中在pop()函数封装后通过this.props.xxx来执行! 2:通过组建之间的通知(监听)来执行! 在A页面上: 在didmount中 this.listener = RCTDeviceEventEmitter.addListener('undateUserInfo',(value)=>{ // 接受到通知后刷新 co

redmine配置邮件通知服务

redmine是一款非常优秀的项目管理平台,但有个明显的缺点--没有消息推送功能,也就是说当redmine上的任务有更新时,干系人无法及时的获取消息.但redmine可以通过绑定邮箱.以邮件通知的形式给干系人推送任务更新提醒. 传统的redmine安装配置方法非常复杂,推荐大家使用bitnami一键安装服务,它集成了redmine所需的各种环境,像安装普通软件一样,非常方便. bitnami redmine 下载地址:https://bitnami.com/stack/redmine 当我们把r

nagios 自动恢复告警通知

nagios中在nagios告警时,有时候会禁用告警通知,监控恢复正常时禁用通知没有取消,导致下次监控不正常时没有告警通知:为防止这种情况,编写了恢复告警通知脚本,添加了恢复此类告警通知的例行任务 代码如下: #!/usr/bin/env python #Desc: to change services'notification status(0 or 1) if current state of service is ok while enable_notification is False

SharePoint 2010/SharePoint 2013 Custom Action: 基于Site Collection 滚动文字的通知.

应用场景: 有时候我们的站点需要在每个页面实现滚动文字的通知,怎么在不修改Master Page的情况下实现这个功能?我们可以使用Javascript 和 Custom Action 来实现. 创建一个Custom Action.主要使用到 Location = 'ScriptLink' 属性, 该属性可以动态的加载JavaScript 文件链接和代码块到模板页.代码如下: <Elements xmlns="http://schemas.microsoft.com/sharepoint/&

易宝典文章——玩转Office 365中的Exchange Online服务 之二十五 配置出站垃圾邮件策略通知

企业的邮件服务器应该遵从良好的发件规范,尽量减小发送垃圾邮件和批量邮件到外部邮件系统.这样可以保护企业的邮件服务器发送IP不被收集到垃圾邮件服务器列表中,从而保证从企业的邮件服务器或企业域名发送的邮件,收件方能够正常接收.基于此种情况,出站垃圾邮件筛选即尤为重要,因为它起到了保护企业邮件系统发送邮件的可靠性,同时也保护了企业在商业交往中的信誉和利益.Exchange Online的出站垃圾邮件筛选与入站筛选类似,均有连接筛选和内容筛选构成,但是出站筛选是无法进行配置的.不过可以配置出站垃圾邮件策

iOS pop使用通知传值

iOS pop回父级页面,使用通知传值 输入所要发送的信息 ,同时将label的值通过button方法调用传递, - (IBAction)buttonClick:(id)sender { //添加 字典,将label的值通过key值设置传递 NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:self.textFieldOne.text,@"textOne",self.textFieldTwo.text,@&q

【转载】COM 组件设计与应用(十四)——事件和通知(vc.net)

原文:http://vckbase.com/index.php/wv/1244.html 一.前言 我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者: 我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者: 我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者: ... ... ... ... 本回书开始话说 COM 的事件.通知.连接点......这些内容比较多,我分两次(共四回)来介绍. 二.通知的方法 当程序