OC中类的扩展

类的属性写在 .h 文件里面可以被继承的子类使用

类的属性写在 .m 大括号内,只能被本类使用


读取项目文件中的文件

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //读取项目文件中的文件
    //创建一个NSString来接受项目文件中的info.plist文件
    NSString *a = [[NSBundle mainBundle]pathForResource:@"Info" ofType:@"plist"];
    NSLog(@"%@", a);
    
    //创建一个字典b,保存a的路径
    NSMutableDictionary *b = [[NSMutableDictionary alloc]initWithContentsOfFile:a];
    NSLog(@"%@", b);
    
    //解析字典b中key为MinimumOSVersion的value值
    NSString *c = [b objectForKey:@"MinimumOSVersion"];
    NSLog(@"%@", c);
    
    
    
}



KVC

间接方法访问成员属性的机制,以前我们是通过1.调用存取方法 2.调用实例变量访问的。


žKvc 键值编码访问。 ž

不用调用存取方法。 ž

就算是私有的也可以访问。

作用:在许多情况下,可以使用键值编码方法来简化应用程序的代码

#import <Foundation/Foundation.h>
//调入类PEOPLE的.h头文件
#import "PEOPLE.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //实例化一个p1,赋给内存空间
        PEOPLE *p1 = [[PEOPLE alloc]init];
        //设置属性:通过KVC的方法,找到对象p1的key@"name",通过key@"name"给p1的name属性赋值
        [p1 setValue:@"wangzhaohua" forKey:@"name"];
        
        NSLog(@"%@", p1.name);
        
        //获取属性
        [p1 valueForKey:@"name"]
        
        
    }
    return 0;
}




KVO

Kvo是对 对象的属性值 进行监听

ž必须是  .语法或者kvc改变属性才可以触发kvo

#import "ViewController.h"

@interface ViewController (){
    NSTimer *timePlay;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //添加两个观察者观察name和age是否发生变化
    [self addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"name"];
    [self addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"name"];
    
    
    //添加一个定时器,设置监视的时间间隔和触发的方法
    timePlay = [NSTimer scheduledTimerWithTimeInterval:4.5 target:self selector:@selector(haha:) userInfo:nil repeats:YES];
}


//定时器方法
-(void)haha:(id)abc{
    NSString *outString = [NSString stringWithFormat:@"current@d", arc4random()%100];
    self.name = outString;
    self.age = outString;
}


//设置键值观察,也就是被观察的值改变的时候所触发的方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    NSString *contextString = [NSString stringWithFormat:@"%@", context];
    NSLog(@"%@", contextString);
    
    if ([contextString isEqualToString:@"age"]) {
        NSLog(@"ageObser%@", [change objectForKey:@"new"]);
    }else{
        NSLog(@"nameObser%@", [change objectForKey:@"new"]);
    }
}



你可能感兴趣的:(OC中类的扩展)