OC学习之路(10) - 设计模式

本文介绍了iOS开发中不同类间通讯的方式,包括代理设计模式、KVO(键值观察)、单例模式和通知中心等,并详细展示了单例模式的实现代码及通知中心的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)类之间的通讯方式(数据传递)

代理设计模式

一对一

一个类只能委托一个对象去完成一件事情

KVO(监听)

一对多

一个类可以监听多个类

单例模式

公共

所有类共用这个对象

通知中心

一对多

一个对象可以通知多个对象

(二)单例模式

User.m代码如下:

@implementation User

static User *user = nil;         //定义静态的变量,保证对象在程序生命周期中不被销毁

+ (instancetype)shareUser{

    if(!user) {               //创建一个实例对象,当为nil时再创建否则返回原来的值,从而保证始终是同一个实例对象

        user = [[User alloc]init];

    }

    return user;

}

//覆盖allocWithZone: 避免使用alloc创建新的实例对象

+ (instancetype)allocWithZone:(struct _NSZone *)zone{

    if(!user) {

        user = [superallocWithZone:zone];

    }

    return user;

}

//覆盖copyWithZone: 避免使用copy复制出新的实例对象

- (id)copyWithZone:(NSZone *)zone{

    return user;

}

@end

 

Ø  alloc方法:开辟空间

Ø  init方法:对创建出来的父类对象属性初始化,以及当前对象的属性进行初始化

(三)通知中心

Ø  当一个类发送一个消息/通知,则其他监听了这个通知的类,会触发其设定的方法,从而执行设定的方法进行处理

Ø  通知中心的使用

//发送通知

NSDictionary *dic =@{@"1":@"哥哥",@"2":@"姐姐"};

[[NSNotificationCenterdefaultCenter] postNotificationName:@"登陆消息"object:@"登陆成功" userInfo:dic];

//监听通知

[[NSNotificationCenterdefaultCenter] addObserver:self selector:@selector(pay:) name:@"登陆消息" object:nil];

//通知处理方法

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

   NSLog(@"%@  %@",notification.name, notification.object);

}

//移除通知

- (void)dealloc{

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

   [[NSNotificationCenter defaultCenter] removeObserver:selfforKeyPath:@"登录消息"];//移除指定名称的通知

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值