OC中類的擴展

類的屬性寫在 .h 文件裏面能夠被繼承的子類使用dom

類的屬性寫在 .m 大括號內,只能被本類使用編碼


讀取項目文件中的文件
spa

- (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);
    
    
    
}



KVCcode

間接方法訪問成員屬性的機制,之前咱們是經過1.調用存取方法 2.調用實例變量訪問的。orm


žKvc 鍵值編碼訪問。 žserver

不用調用存取方法。 ž對象

就算是私有的也能夠訪問。繼承

做用:在許多狀況下,可使用鍵值編碼方法來簡化應用程序的代碼內存

#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;
}




KVOget

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"]);
    }
}
相關文章
相關標籤/搜索