美文网首页
iOS 常用设计模式

iOS 常用设计模式

作者: zyh1158 | 来源:发表于2016-08-17 14:12 被阅读52次

目录

  • 观察者 (NSNotification)
  • 委托模式 (Delegate)
  • 单例 (Single)
  • MVC
一、观察者 (NSNotification)

观察者设计模式就像微信公众号一样,你关注了一个公众号,才能收到公众号发的消息,所以说addObserver注册消息通知是前提,只有先注册消息通知,才能收到相应post的消息。

// 注册一个登陆成功的通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(loginSucceed) name:NFLoginSucceedNotification object:nil];

注册完这个通知后,不管你是账号登录,还是注册完直接登录,还是第三方登录成功的时候,都可以post一个登陆成功的通知。

// 登录成功的通知
[[NSNotificationCenter defaultCenter]postNotificationName:NFLoginSucceedNotification object:nil];

通知使用起来比较简单就不多介绍了,以下是通知的几点说明:

  1. 通知的名字尽量使用常量字符串
// 登录成功
UIKIT_EXTERN NSString *const NFLoginSucceedNotification;
  1. 通知的执行顺序,是按照post的顺序执行的,并且是同步操作的,即如果你在程序中的A位置post了一个NSNotification,在B位置注册了一个observer,通知发出后,必须等到B位置的通知回调执行完以后才能返回到A处继续往下执行,所以不能滥用通知。
  2. 善于用系统提供给我们的通知,比如:
UIKIT_EXTERN NSNotificationName const UIKeyboardWillShowNotification __TVOS_PROHIBITED;
UIKIT_EXTERN NSNotificationName const UIKeyboardDidShowNotification __TVOS_PROHIBITED;
UIKIT_EXTERN NSNotificationName const UIKeyboardWillHideNotification __TVOS_PROHIBITED;
UIKIT_EXTERN NSNotificationName const UIKeyboardDidHideNotification __TVOS_PROHIBITED;

4.通知发出后,controller不能从观察者获得任何的反馈信息,这也通知和委托模式 (Delegate)的一个区别吧。

5.NSNotification与多线程问题,在多线程应用中,Notification在哪个线程中post,就在哪个线程中被转发,而不一定是在注册观察者的那个线程中。也就是说,Notification的发送与接收处理都是在同一个线程中。

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"addObserver notification thread = %@",[NSThread currentThread]);
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification) name:HandleNotificationName object: nil];
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       
        [[NSNotificationCenter defaultCenter] postNotificationName:HandleNotificationName object:nil];

        NSLog(@"post notification thread = %@",[NSThread currentThread]);
    });
}

- (void)handleNotification
{
    NSLog(@"handle notification thread = %@",[NSThread currentThread]);
}

其打印结果如下:

addObserver notification thread = <NSThread: 0x60000007be00>{number = 1, name = main}
handle notification thread = <NSThread: 0x600000267200>{number = 3, name = (null)}
post notification thread = <NSThread: 0x600000267200>{number = 3, name = (null)}
二、代理 (Delegate)

相关文章

  • 常用设计模式整理

    ios面试题(整理) ios常用的设计模式有哪些? MVC模式、委托模式、观察者模式(kvo、kvc、通知机制)、...

  • 单例的2种写法

    单例模式是iOS开发中最常用的设计模式,iOS的单例模式有两种官方写法,如下: 1,常用写法 import "Se...

  • MY_iOS常用设计模式总结

    iOS常用设计模式总结(一) 设计模式大概分成三类:1.创建型:单例设计模式、抽象工厂设计模式2.结构型:MVC ...

  • iOS工厂模式

    工厂模式(Factory Pattern)是 iOS 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它...

  • 03-设计模式(包括KVO/KVC)

    iOS开发常用设计模式? 详细blog链接 MVC模式 MVVM模式 代理模式 单例模式 工厂模式 装饰者模式 观...

  • 《iOS开发》--------常用的设计模式

    关于iOS开发中的设计模式,当下有集中最常用的设计模式:代理模式、观察者模式、MVC模式、单例模式、策略模式、工厂...

  • iOS开发之MVVM+RAC架构模式

    在说MVVM之前,首先要了解我们最常用的MVC设计模式⬇️ 1.MVC设计模式 苹果官方将MVC设计模式作为iOS...

  • IOS开发过程中常用的设计模式

    当下IOS开发的过程中,常用的设计模式有:单例模式、委托模式、观察者模式和MVC模式; 一、单例模式 我们平时常用...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

  • iOS设计模式之美-适配器模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

网友评论

      本文标题:iOS 常用设计模式

      本文链接:https://www.haomeiwen.com/subject/efpmsttx.html