IOS中Key-Value Coding (KVC)的使用具體解釋

來源:互聯網
上載者:User

標籤:

  kvc。鍵值編碼,是一個非正式的協議。它提供一種機制來間接訪問對象的屬性。

直接訪問對象是通過調用訪問器的方法實現,而kvc不須要調用訪問器的設定和擷取方法。能夠直接訪問對象的屬性。

  以下介紹一下kvc的使用方法:

1、對屬性賦值

  kvc是通過鍵值對的方式對屬性設定值,提供了以下的方法。相當於訪問器中的set方法。value為要設定的值,key是字串,字串中內容為為屬性的名稱

- (void)setValue:(id)value forKey:(NSString *)key;- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;

  以下通過一個小範例解說一下通過訪問器和kvc對屬性賦值的代碼實現。

  如果Student類中有一個name屬性,直接對name賦值的方式為:

Student *stu = [[Student alloc] init];stu.name = @"jerehedu";

  通過kvo對name進行賦值:

Student *stu = [[Student alloc] init];[stu setValue:@"jerehedu" forKey:@"name"];

  如果學生類中另一個屬性為ClassInfo班級類的對象stuClass,在ClassInfo班級類中有個classNo班級號的屬性。以下通過直接的方式設定班級號:

stu.stuClass = [ClassInfo new];stu.stuClass.classNo = 1;

  通過kvc設定班級號:

stu.stuClass = [ClassInfo new];[stu setValue:@(1) forKeyPath:@"stuClass.classNo"];

  通過keyPath設定時,路徑由 xx.xx 表示;

  value的值為OC對象。假設為基礎資料型別 (Elementary Data Type)。須要進行裝箱。也就是封裝為OC對象。

2、擷取屬性的值

  kvc提供了擷取對象屬性值的方法,相當於訪問器的get方法,取值的時候也是通過鍵值對方式。

- (id)valueForKey:(NSString *)key;- (id)valueForKeyPath:(NSString *)keyPath;

  以下通過一個小範例解說一下通過訪問器和kvc對屬性取值的代碼實現。

  如果要擷取Student類中name的值。直接對name取值的方式為: 

NSString *name = stu.name;

  通過kvc取值的方式為:

NSString *name = [stu valueForKey:@"name"];

  通過訪問器方法直接從Student類中取班級號:

int num = stu.stuClass.classNo;

  通過kvc取Student類中中班級號:

int num = [[stu valueForKeyPath:@"stuClass.classNo"] intValue];

  預設取到的值為OC對象。假設想得到基礎資料型別 (Elementary Data Type),須要進行拆箱操作。

3、key找不到時。處理異常

  使用kvc時。假設代碼中的key值不存在,會拋出異常,能夠在類中通過重寫它提供以下的這種方法來解決問題。

- (void)setValue:(id)value forUndefinedKey:(NSString *)key;

  當key不存在時。會自己主動調用上面的這種方法,能夠在這種方法中進行處理。

4、kvc的使用方法補充

  kvc很好用,能夠簡化我們的代碼,除了能夠不用通過訪問器方法,直接對屬性進行訪問外,還能夠對對象中的屬性進行運算。

  比方新加入一個Test測試類,裡面有一個score分數的屬性,在Student類中有一個數組。數組中存放考試資訊(Test類對象),通過kvo能夠直接得到數組中儲存的全部考試的平均成績、最好成績等。

  通過kvo儲存考試數組資訊:

        NSMutableArray *ary = [NSMutableArray array];        for (int i=0; i<5; i++) {            Test *test = [[Test alloc] init];            [test setValue:@(100-10*i) forKey:@"score"];            [ary addObject:test];        }    stu.testAry = ary;

  在Student類中將考試列印資訊輸出:

NSLog(@"show: testAry = %@ ",[self valueForKey:@"testAry"]);    NSLog(@"show: testAry.score = %@",[self.testAry valueForKey:@"score"] );    NSLog(@"show: testAry.score = %@",[self.testAry valueForKeyPath:@"score"] );        NSLog(@"show: 數組中總成績SUMscore = %@",[self.testAry valueForKeyPath:@"@sum.score"] );    NSLog(@"show2: 數組中平均成績AVGscore = %@",[self.testAry valueForKeyPath:@"@avg.score"] );    NSLog(@"show2: 數組中最大成績MAXscore = %@",[self.testAry valueForKeyPath:@"@max.score"] );    NSLog(@"show2: 數組中最小成績MINscore = %@",[self.testAry valueForKeyPath:@"@min.score"] );

 

  疑問諮詢或技術交流。請增加官方QQ群: (452379712)

 

傑瑞教育
出處:http://blog.csdn.net/jerehedu/ 
本文著作權歸煙台傑瑞教育科技有限公司和CSDN共同擁有,歡迎轉載。但未經作者允許必須保留此段聲明。且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。 

IOS中Key-Value Coding (KVC)的使用具體解釋

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.