一、dataCenter单例传值
一、目的要求:利用单例传值修改界面1的背景颜色
二、单例传值的特点:每次修改和拿到的都是同一个值,用于多个界面之间信息共享,相当于C语言的全局变量。单例参加一般以shared default开头命名。单例更为详尽的用法和注意事项,将在往后的多线程中细说。
三、单例传值的实现:
1、准备步骤
1.1.新建一个工程
1.2.新建一个类DetaCenter,这里继承的是NSObject
2、单例实现
2.1.DetaCenter.h文件里公开一个单例方法(一般是类方法),并且声明一个UIColor类型的成员变量存储背景颜色的值(这个按实际需求声明自己需要的类型),因为UIColor是UIKit类里的,所有要import <UIKit.UIKit.h>头文件
详细代码如下:
2.2DetaCenter.m文件里实现单例方法(创建单例)
//在堆中声明一片dataCenter的内存空间
//特点:不会被自动回收,用static修饰,静态
代码如下:
2.3ViewController.m文件中包含DetaCenter.h头文件,并且对单例进行赋值和获取
代码如下:
二、通知传值
一、目的要求:利用通知传值修改界面1的背景颜色
二、通知传值的特点:多个VC注册通知,单个VC发送通知时,注册通知的vc都响应方法(一对多的传值方式)
三、简单步骤:(先监听,再发送)
界面1注册通知:
//添加到通知中心,使用:传递通知(NSNotification)本身给方法[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(notiMethod:) name:@"changeColorNoti"object:nil];
界面2发送通知:
//用post方法使name相同的通知作响应[[NSNotificationCenterdefaultCenter]postNotificationName:@"changeColorNoti"object:[UIColorblackColor] userInfo:nil];
四、详细代码
界面1 .m文件
界面2 .m文件
三、协议代理传值
一、目的要求:利用协议代理传值修改界面1的背景颜色
二、协议代理传值的特点:例如修改背景颜色,可以设置一个专门的代理类来实现,其他需要修改背景颜色的所有类都可以与其签订协议来修改自己的背景颜色--封装的思想
三、步骤:
3.1 在界面2中(协议代理类)制定协议,并声明协议方法,但不实现,谁遵守协议谁实现
3.2 在界面2中(协议代理类)公开一个携带协议的id指针
代码如下:
3.3 在界面1 中(遵守协议类)声明界面2(声明协议类)的头文件,并且遵守协议
3.4 在界面1中(遵守协议类)进行协议的关联
3.5 在界面1中(遵守协议类)实现协议方法
代码如下:
3.6 在界面2的.m(协议代理类)的某个状态中调用协议方法,传入参数
代码如下:
四、block传值
一、目的要求:利用block传值修改界面1的背景颜色
二、block传值的特点:block传值是传一块待执行的代码区域,待激活该代码块区域是才会执行,block传值是现在苹果官方推荐的,也是将来的一种趋势
三、步骤:本人对block理解不深,就不做多描述以免误导大家,待将来理解深刻了,在回来补齐其中知识点,这里直接贴上代码。
VC:
SVC.h
SVC.m