OC学习篇之-----KVC

设计模式 – 观察者模式
设计模式是用来解决某些特定问题的
观察者模式
什么是观察者模式?
当一个类需要发送消息给多个类的时候,就用观察者模式

 什么时候使用观察者模式?
    在工程中,一些类去观察A类,当’A类‘发生变化时,这些观察类就会收到消息,和作出相应的反应。

 观察者模式的作用?
 一对多的发送消息。
    如何在OC中实现观察者模式呢?
        OC中观察者模式的设计基础:'KVC/KVO',
 KVC 的由来,在ios2.0之前,并没有属性来访问类中的实例变量,那时候开发人员使用'键值编码'的方式来访问类的实例变量,即是‘KCV’方式。

 KVC(key-Value Coding)键值编码
 通过制定表示要访问的属性的名字的字符串标识符,可以进行类的属性读取和设置。KVC提供了一种在运行时而非编译时动态访问对象属性于实例变量的方式

直接看代码
一个书本类:

#import <Foundation/Foundation.h>

@interface Book : NSObject
@property(nonatomic,assign)NSString *name;

@end

一个学生类:.h,里面有一个属性是BOOK类型

#import <Foundation/Foundation.h>
#import "Book.h"
@interface Student : NSObject

@property(nonatomic,assign)Book *book;
@property(nonatomic,copy)NSString *name;

@end

主文件中:

#import "ViewController.h"
#import "Book.h"
#import "Student.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];


    Book *book = [Book new];
    Student *stu = [Student new];
    [stu setValue:@"小明" forKey:@"name"];
    //通过键,或键路经来赋值和取值
    [stu setValue:book forKeyPath:@"book"];
    [stu setValue:@"语文" forKeyPath:@"book.name"];
    NSLog(@"%@,%@",[stu valueForKey:@"name"],[stu valueForKeyPath:@"book.name"]);

}
总结:这就是KVC了,通过键,或键路经来赋值和取值。

另:KVC作用挺强大的例如可以用于运行时动态取值,如下:
//动态访问某些属性
    //试用KVC动态访问某些属性,使用一些可以在运行时而不是编译时改变的值 的例子
    stu1.p1 = 1;
    stu1.p2 = 2;
    stu1.p3 = 3;
    //传统方法
   int num = [stu1 getValuePropertyName:@"p1"];
    NSLog( @"num = %d",num);

    //动态访问
    int num1 = [stu1 getValuePropertyNewName:@"p2"];
    NSLog( @"num1 = %d",num1);

以下是两个方法的实现代码:

//传统的代码实现
-(int)getValuePropertyName:(NSString *)pName{

    if ([pName isEqualToString:@"p1"]) {
        return self.p1;
    }else if ([pName isEqualToString:@"p2"]){
        return self.p2;
    }else if ([pName isEqualToString:@"p3"]){
        return self.p3;
    }
    return 0;
}
//KVC的代码实现
-(int)getValuePropertyNewName:(NSString *)pName{
    NSNumber *pNumber = [self valueForKey:pName];
    int number = [pNumber intValue];
    return number;
}

总结:这种情况下,没增加一个变量,传统的方法就要加多一个if语句,而用了KVC得就不用!优势显而易见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值