OC学习之点语法

来源:互联网 发布:出名的网络翻唱歌手 编辑:程序博客网 时间:2024/04/29 20:48

点语法的本质还是进行赋值和取值  也就是说点语法 最终自己会去调用属性的set方法 和get方法

 当点语法在等号左边出现的时候 会调用该属性的set方法 其余的时候出现都是在调用该属性的get方法。

 Child *child =[[Child alloc]init];

//    首先会去寻找这个类中与key对应的set方法 如果没有找到set方法 会继续寻找有没有一个_key的实例变量 继续没有找到 会找_isKey的实例变量 继续没有找到 会去找isKey的实例变量 如果还是没有找到 程序崩溃;

//    类内部的属性或者实例变量叫什么 key就写什么


//    [child setValue:@"哈哈" forKey:@"name"];

    

//    通过KVC传入的是什么类型 取值就是什么类型 接收的属性或者实例变量 会根据自身的类型继续转换

//    [child setValue:@"KVO" forKey:@"name"];

//    NSLog(@"%@",[child valueForKey:@"name"]);

////    可以给一个空值;

//    [child setValue:nil forKey:@"name"];

//    [child setValue:@18 forKey:@"age"];

//    [child sayHi];


//    对象类型可以给空值 非对象类型不可以给空值 否则会程序崩溃;

    //    如果非对象类型传入空值 实现:-(void)setNilValueForKey:(NSString *)key

//这个方法则不会导致崩溃;(空实现即可);

//    [child setValue:@2 forKey:@"age"];

//    [child sayHi];

//    如果类内部没有与key值对应的实例变量或属性 进行赋值 会导致程序崩溃

//    如果实现-(void)setValue:(id)value forUndefinedKey:(NSString *)key 这个方法则不会导致程序崩溃;(空实现)

//    [child setValue:@"男" forKey:@"gender"];

/    通过A类给B类的属性赋值 首先会找A类中有没有SetB的方法 在去寻找B类中有没有setName的方法通过寻找key值路径 来进行最终的赋值;

//    A*a =[[A alloc]init];

//    [a setValue:@"哇哈哈" forKeyPath:@"b.name"];

//    [a sayHi];



0 0
原创粉丝点击