(一)类之间的通讯方式(数据传递)
代理设计模式 | 一对一 | 一个类只能委托一个对象去完成一件事情 |
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:@"登录消息"];//移除指定名称的通知
}