类的属性写在 .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"]); } }