iOS之Cocoa大招KVC鍵值編碼

在iOS編程中,KVC(Key Value Coding)鍵值編碼被稱爲Cocoa框架的大招,這是有一定道理的,KVC是底層的操作,它可以做到很多難以實現的操作,同時也可以使得代碼變得很簡單。本文通過對KVC的各種不同功能來進行說明:

新建一個Command Line Tool項目
1、KVC可以改變那些私有的屬性:
新建一個繼承於NSObject的類Person,在.m文件中添加一個屬性name,作爲Person類的一個私有屬性
#import "Person.h"
@interface Person()
@property (nonatomic, copy) NSString *name;
@end

@implementation Person
@end
返回到main.m文件中,直接進行修改這個屬性的話:
        Person *person = [[Person alloc]init];
        person.name = @"nineteen";
會出現錯誤提示:
Property 'name' not found on object of type 'Person'
表示這個私有屬性是找不到的,但是我們可以通過KVC來進行操作:
        Person *person = [[Person alloc]init];
//        person.name = @"nineteen";
        [person setValue:@"nineteen" forKeyPath:@"name"];
        NSLog(@"%@",[person valueForKeyPath:@"name"]);
這樣打印出來的結果爲:
2015-10-15 22:57:03.915 KVCTest[6934:500230] nineteen
說明可以通過KVC來改變那些私有屬性

2、KVC可以改變被只讀修飾的屬性
在Person類的.h文件中定義一個readonly屬性:
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (copy, nonatomic, readonly) NSString *gender;
@end
然後返回到main.m文件中,想嘗試去利用setter方法去修改gender屬性:
        person.gender = @"男";
發現會出現這樣一個錯誤提示:
Assingnment to readonly property
表示readonly屬性是不能夠通過setter方法來進行改變值的,那麼這時候就通過KVC進行賦值修改
        [person setValue:@"男" forKeyPath:@"gender"];
        NSLog(@"%@",person.gender);
打印出來的結果爲:
2015-10-15 23:36:17.173 KVCTest[6967:537532] 男










發佈了52 篇原創文章 · 獲贊 8 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章