類的屬性寫在 .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"]); } }