Objective-C学习笔记-KVC

1.KVC(key-value-coding)能够让程序通过名称直接存取属性,KVC有关方法定义在NSObject,KVC违背了对象封装理念,因为即使属性声明为readonly,使用KVC依然可以修改实例变量的值。

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface TestClass : NSObject
@property (nonatomic,readonly) NSString * name;
@end

NS_ASSUME_NONNULL_END
#import <Foundation/Foundation.h>
#import "TestClass.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        TestClass *testObj=[[TestClass alloc] init];
        [testObj setValue:@"123" forKey:@"name"];
        
        
        NSLog(@"Test Name is %@",testObj.name);
    }
    return 0;
}

2.在上面代码中,使用setValue的时候,会首先查找名为setName的存方法,如果没有,则直接为实例变量_name赋值,取方法valueForKey同理。

NSLog(@"Test Name is %@",[testObj valueForKey:@"name"]);

3.当要存取的变量不是对象的时候,例如int,可以使用NSNumber转换,即取值的时候会得到一个NSNumber,存值的时候存入一个NSNumber。

[testObj setValue:[NSNumber numberWithInt:200] forKey:@"height"];
NSLog(@"Test Height is %@",[testObj valueForKey:@"height"]);

4.获取对象的某个值时,有时候层级会很深,例如Obj.A.B.C.D.height,KVC也支持这种写法,例如

[testObj setValue:[NSNumber numberWithInt:200] forKey:@"A.B.C.D.height"];
posted @ 2018-10-13 00:38  土豆吞噬者  阅读(87)  评论(0编辑  收藏  举报