传值
来源:互联网 发布:淘宝多肉植物哪家好 编辑:程序博客网 时间:2024/05/22 00:39
/*================== ***** KVO传值 **** ==========================
=====================
// 注册当前控制器为Boy对象的观察者身份,当boy对象的属性发生变化的时候,就会通知控制器
/*
第一个参数:要成为观察者的对象,在这里就是self
第二个参数:就是观察者要追踪的变化的属性名
第三个参数:关注的属性的变化规则
第四个参数:是一个const char* 一般用于传值操作
*/
[boy addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:NULL];
// 观察者对象要实现的方法,当被观察的模型对象的属性发生改变的时候,这个方法将会被回调,我们可以在这里获取我们想要知道的内容
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
//参数objcet就是当前我们观察的对象指针
if ([object isMemberOfClass:[Boy class]]) {
// 属性变化的新旧值都在参数change里
NSString* oldName = [change objectForKey:@"old"];
NSString* newName = [change objectForKey:@"new"];
NSLog(@"old:%@,new:%@",oldName,newName);
}
}
// 当我们更改模型对象boy的name属性的时候,观察者(当前控制器对象)就会观察到boy得变化
- (IBAction)boyChnage:(id)sender {
boy.name =self.boyField.text;
}
/*===============*** end ***===================================
------------------------------------------------------
*/
//==================== *** KVC *** ================================
// ========================
#import "GCZRootViewController.h"
#import "GCZFirstViewController.h"
@interface GCZRootViewController ()
// 用于保留下一级视图回传的数据
@property (strong,nonatomic) NSString* firstString;
-(void)kvc传值
{
GCZFirstViewController* firstVC = [[GCZFirstViewController alloc] init];
//使用KVC传值的好处是,无须关注对象的内部结构,我甚至可以不知道当前赋值的对象是什么,都可以对其进行赋值
//如果对象不存在我们要赋值的属性,就会报错,解决办法是,先判断对象能否响应这个属性的setter方法
if ([firstVC respondsToSelector:@selector(setColorString:)]) {
[firstVC setValue:@"red" forKey:@"colorString"];
}
//让下一级视图控制器对象保留当前控制器对象的地址,方便数据回传
if ([firstVC respondsToSelector:@selector(setLastVC:)]) {
[firstVC setValue:self forKey:@"lastVC"];
}
[self presentViewController:firstVC animated:YES completion:nil];
}
#import "GCZFirstViewController.h"
@interface GCZFirstViewController ()
@property (strong,nonatomic) NSString* colorString;
// 用于保留上一级视图控制器对象的地址
@property (weak, nonatomic) id lastVC;
-(void)回传
{
// 使用KVC回传数据
if ([self.lastVC respondsToSelector:@selector(setFirstString:)]) {
[self.lastVC setValue:@"yellow" forKey:@"firstString"];
}
[self dismissViewControllerAnimated:YES completion:nil];
}
//======================== end ================================
// =================
/*】
++++++++++++++++
+++++++++++++++++++++ 通知中心传值 +++++++++++++++++++++++++++++
++++++++++++++++++++++++++
*/
//【注】一定是先注册观察者身份,后向通知中心传值,这个顺序不能反
#import "GCZFirstViewController.h"
#import "GCZSecondViewController.h"
- (void)通知中心
{
/*
第一个参数:要注册成为观察者的对象
第二个参数:接收到“暗号”的时候,观察者对象要响应的方法
第三个参数:通知中心接受到的消息(暗号),暗号是由被观察的一方发出
第四个参数:观察者一方要携带的参数,指定为nil
*/
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeAction:) name:@"change" object:nil];
}
- (void)changeAction:(NSNotification*)noti
{
//使用通知中心获取参数
NSString* str = [noti object];
NSLog(@"first str = %@",str);
if ([str isEqualToString:@"red"]) {
self.view.backgroundColor = [UIColor redColor];
}
}
#import "GCZSettingViewController.h"
- (IBAction)changeBtn:(id)sender {
// 获取通知中心
NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
// 向通知中心发送暗号“change”
//第二个参数就是我们要传递给观察者的值,这个参数不局限于字符串,也可以是字典、数组等等
[defaultCenter postNotificationName:@"change" object:@"red"];
}
/*======================= 通知中心传值结束 ========================
===========================
================ * 单例传值 * ===================
==================================
*/
//单例的方法是保证对象的唯一,,,在运用单例传值的时候一定要建立一个单例类
#import <Foundation/Foundation.h>
// 定义自己的单例类
@interface GCZColorModel : NSObject
// 单例方法,保证对象唯一
+ (GCZColorModel*)sharedColorModel;
//实现部分,要牢记
#import "GCZColorModel.h"
@implementation GCZColorModel
static GCZColorModel *sharedColorModel =nil;//这个要写在上面
+(GCZColorModel *)sharedColorModel
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedColorModel = [[self alloc]init];
});
return sharedColorModel;
//dispath_once函数不仅意味着代码仅会运行一次,而且还意味着此线程还是线程同步的;
}
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值
- 传值、传引用、传值
- iOS传值(block传值)
- IOS传值:block传值
- c#传值
- JavaScript传值
- wireshark抓包图解 TCP三次握手/四次挥手详解
- unity3d中类似googleearth的操作
- 黑马程序员 JAVA jar包的创建和操作
- 建立git仓库及同步SDK
- js怎么样控制打开网页窗口的大小,HTML如何关闭窗口大全(经典+有用+常用)
- 传值
- 学习 GCC编译器使用1
- 自定义滚动条样式
- 通过SQL Server 2008 访问MySQL
- 8.1 使用行为集合
- p4 add 目录
- [Elasticsearch] 索引管理 (五) - 默认映射,重索引,索引别名
- Android学习笔记三:第一个应用程序的扩充
- CADisplayLink 及定时器的使用