• Objective-C(十九、通知-消息发送模式之中的一个)——iOS开发基础



    结合之前的学习笔记以及參考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。

    知识点一直在变。仅仅是作为參考。以苹果官方文档为准~


    十九、通知-消息发送模式之中的一个


    1、几个基本概念
    (1)通知:在面向对象的程序中。有时须要将发生的时间通知给多个对象的消息发送模式;
    (2)通知中心:期望取得通知的对象预先向通知中心注冊期望取得的通知;
    (3)发送:某对象向通知中心发送消息发送请求,仅仅有注冊过该通知单额对象,都可获得通知中心推送的消息;
    (4)观察者:消息发送目标,在通知中心注冊的对象(能够有多个)。
    (5)多播:某个对象向特定的多个对象发送消息,通知就是多播的一种


    2、通知对象:向通知中心发送消息,必要的信息会在NSNotification类实例中集中后发送给通知中心

    + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
    + (instancetype)notificationWithName:(NSString *)aName
                                  object:(id)anObject
                                userInfo:(NSDictionary *)aUserInfo;

    变量说明:
    aName:识别通知的短文本。向NSNotification接口发送例如以下消息可取出名字
    anObject:和通知一起发送的附带信息的对象,多为发送通知的对象,也可为nil
    userInfo:传递和通知相关的各种信息,也可为nil


    3、通知中心NSNotificationCenter
    (1)系统有默认的通知中心。一般不用自己创建。

    类方法获取

    + (NSNotificationCenter *)defaultCenter;
    [NSNotificationCenter defaultCenter];

    (2)通知发送

    - (void)postNotification:(NSNotification *)notification;
    - (void)postNotificationName:(NSString *)aName object:(id)anObject;
    - (void)postNotificationName:(NSString *)aName
                          object:(id)anObject
                        userInfo:(NSDictionary *)aUserInfo;

    指定通知名、对象和用户字典生成通知。然后发送给接收者的通知中心


    (3)观察者注冊

    - (void)addObserver:(id)observer
               selector:(SEL)aSelector
                   name:(NSString *)aName
                 object:(id)anObject;

    变量说明:
    observer:通知的监听者
    aSelector:收到通知后,会调用observer的此方法。
    aName:通知名。当不为nil时,仅仅接受特定对象发送的通知;假设未nil表示没有设定的发送源
    object:通知的发送者

    仅指定特定的多个通知名的通知时,能够将各个通知名分别在通知中心注冊,或者指定通知名为nil使其发送有关全部通知名的消息。并在接收后仅仅处理必要的消息;两者都为nil则能够接收全部关于发送消息的通知(这是书上原话)


    (4)删除观察者的注冊

    - (void)removeObserver:(id)observer;
    - (void)removeObserver:(id)observer
                      name:(NSString *)aName
                    object:(id)anObject;
    [NSNotificationCenter defaultCenter] removeObserver:obj];

    (5)关于内存管理
    (1)在引用计数管理的情况下,通知中心在注冊观察者时,并不retain观察者及发送元对象。因此释放这些对象之前。要确实从通知中心删除相关设置。

    否则指向释放对象的指针会变成空指针。(即要remove)
    (2)在垃圾回收机制时。通知者和发送源对象会使用弱引用在通知中心注冊。

    不管是否注冊,都可能被回收释放。

    无需显式删除观察者的注冊;


    我个人简单地理解一下。就是以下几句白话~

    (1)通知中心有默认的。不要纠结它究竟在哪里,要不要创建。仅仅要抓好发送通知和观察者就能够。
    (2)能够有多个观察者。注冊便是。
    (3)通知对象能够不用创立,直接发送通知就能够了。
    (4)观察者的地方add。remove;
    (5)name为nil,能够接受全部发送的通知

    这部分的代码样例。请參考下一篇
    “通知模式实现两个textField传值及模态视图——iOS开发”

  • 相关阅读:
    【计算机视觉】深度学习视觉领域常用数据集汇总
    【计算机视觉】常用图像数据集
    【计算机视觉】ImageNet介绍
    【神经网络与深度学习】卷积与反卷积
    【视频开发】【计算机视觉】全景视频拼接关键技术
    【计算机视觉】分辨率与超分辨率图像重建
    【计算机视觉】【神经网络与深度学习】深度学习在图像超分辨率重建中的应用
    【VS开发】【C/C++开发】关于boost库的C++11导致的undefined符号问题
    【VS开发】【C/C++开发】vs2015编译boost 64位
    【视频开发】【计算机视觉】相机标定(Camera calibration)《二》
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8430384.html
Copyright © 2020-2023  润新知