zoukankan      html  css  js  c++  java
  • iOS学习——Notification通知机制

    iOS学习——Notification通知机制

    iOS中的事件有哪几种

    iOS的事件机制一共三种分别是

    1. addTarget方式
    2. delegate代理方式
    3. Notification通知机制

    通知机制的原理

    1. iOS的通知分为通知发布者和通知监听者,通知将会放在NSNotificationCenter中。
    2. 通知发布者发布带有信息(或者不带有信息)的通知,放置到NSNotificationCenter中。
    3. 通知监听者可以选择需要监听的对象。
    4. 要注意的是,在编码中是先放置监听者,再放置通知发布者。保证通知发布时已经有监听者在监听。

    通知机制的实现

    相信你看了下面的代码一定能理解,博主把能打上的注释全部打上了

    //
    //  main.m
    //  day34_通知
    //
    //  Created by 周凌宇 on 15/9/3.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "NotificationListener.h"
    #import "NotificationSender.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // 实例化一个通知发布者
            NotificationSender *sender1 = [[NotificationSender alloc] init];
            // 实例化一个通知监听者
            NotificationListener *listener1 = [[NotificationListener alloc] init];
    
            // 1.获取NSnotificationCenter对象
            NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    
            // 2.先监听
            // 参数1:要监听通知的对象
            // 参数2:该对象的哪个方法监听
            // 参数3:被监听的通知的名称
            // 参数4:发布通知的对象
            // 如果参数3为nil,表示参数4指定的对象发布的所有通知都会被参数2指定的方法监听
            // 如果参数4为nil,表示无论哪个给对象,只要发布的通知名称与参数3相同,都会被监听
            // 如果参数3、4都为nil 那么所有对象发布的所有通知都会被监听
            [notificationCenter addObserver:listener1 selector:@selector(listen:) name:@"通知1" object:sender1];
    
            // 3.向通知中心发布通知
            [notificationCenter postNotificationName:@"通知1" object:sender1 userInfo:@{@"title" : @"阅兵", @"content" : @"阅兵将在9点开始"}];
    
            // 4.移除通知,在监听者的dealloc中移除
    
    
        }
        return 0;
    }
    
    //
    //  NotificationSender.h
    //  day34_通知
    //
    //  Created by 周凌宇 on 15/9/3.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    /**
     *  通知发布者
     */
    @interface NotificationSender : NSObject
    
    /**
     *  通知发布者名称
     */
    @property (nonatomic, copy) NSString *name;
    
    @end
    
    //
    //  NotificationSender.m
    //  day34_通知
    //
    //  Created by 周凌宇 on 15/9/3.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import "NotificationSender.h"
    
    @implementation NotificationSender
    
    @end
    
    //
    //  NotificationListener.h
    //  day34_通知
    //
    //  Created by 周凌宇 on 15/9/3.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    /**
     *  通知监听者
     */
    @interface NotificationListener : NSObject
    
    /**
     *  通知监听者名称
     */
    @property (nonatomic, copy) NSString *name;
    
    /**
     *  监听方法
     */
    - (void)listen:(NSNotification *)noteInfo;
    
    @end
    
    //
    //  NotificationListener.m
    //  day34_通知
    //
    //  Created by 周凌宇 on 15/9/3.
    //  Copyright (c) 2015年 周凌宇. All rights reserved.
    //
    
    #import "NotificationListener.h"
    
    @implementation NotificationListener
    
    - (void)listen:(NSNotification *)noteInfo {
        NSLog(@"监听到");
        NSLog(@"%@",noteInfo);
    }
    
    - (void)dealloc {
        // 移除监听
        // 在dealloc中移除可以确保监听者被销毁时能够移除监听
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    @end
    

    源码

    博主也上传了一份源码http://download.csdn.net/detail/u010127917/9139983
    希望同样在学习的同学能和小鱼一起进步~

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    这几个C++的坑,一旦踩中了,加班是肯定避免不了了!
    2020年11月编程语言排行榜:Java再掉一位排名,真的要跌落神坛了吗?
    自学编程的朋友想要了解怎么快速入门,我想给你这5个建议!
    来看看这些获奖的C语言程序!一个比一个秀,这就是强者的世界吗!
    【每天学点新知识】Linux操作系统下C语言多线程同步使用指南!
    听说IT行业只有高智商的人才能进得去,而且以男性居多,还必须专业对口?
    假如C++是一只箭,你会用它来射哪只雕?
    程序员常见的口头禅,最后一个笑掉大牙,网友:真实的一批!
    Python基础语法
    Python—“helloworld”
  • 原文地址:https://www.cnblogs.com/coderfish/p/4875458.html
Copyright © 2011-2022 走看看