溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

KVC 和 OC字典

發(fā)布時(shí)間:2020-07-21 15:41:20 來源:網(wǎng)絡(luò) 閱讀:261 作者:張濤澤 欄目:網(wǎng)絡(luò)安全

KVC(鍵值編碼)和OC 字典很相似,都是鍵值存儲(chǔ)。但是OC 字典比較靈活,它是一種映射。

  1. [dict setObject:<#(id)#> forKey:<#(id<NSCopying>)#>]  

  1. int main(int argc, const charchar * argv[])  

  2. {  

  3.     @autoreleasepool  

  4.     {  

  5.         NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];  

  6.         [dict setObject@"1a23" forKey:[NSNumber numberWithInt:123]];//<span style="font-family: Arial, Helvetica, sans-serif;">[NSNumber numberWithInt:123] 存放在常量區(qū)(堆、棧、常量、寄存器、代碼區(qū)、全局區(qū))</span>  

  7.   

  8.       

  9.         NSLog(@"y:%@",[dict objectForKey:[NSNumber numberWithInt:123]]);  

  10.     }  

  11.     return 0;  

  12. }  

其輸出結(jié)果是

2015-01-30 10:40:15.677 Test[12481:303] y:1a23


KVC則是不需要是字典對(duì)象調(diào)用,他來自是NSObject的分類。@interface NSObject(NSKeyValueCoding)

KVC的好處是,加入ClassA中的某個(gè)非public成員變量沒有設(shè)置getter方法或者setter方法。但是作為使用者我們必須要獲取或改變這個(gè)成員變量時(shí)可以使用KVC。但是前提是我們這個(gè)key 必須是ClassA的成員變量。否則報(bào)錯(cuò)。


  1. @interface ClassA : NSObject  

  2. {  

  3.     @private  

  4.     NSNumber* _x;  

  5.       

  6. }  

  7. @property(nonatomic,retain,readonly) NSNumber* x;  

  8.   

  9. @end  

  1. #import "ClassA.h"  

  2.   

  3. int main(int argc, const charchar * argv[])  

  4. {  

  5.     @autoreleasepool  

  6.     {  

  7.         ClassA *a=[[ClassA alloc] init];  

  8.         [a setValue:[NSNumber numberWithInt:123] forKey:@"x"];  

  1. <span style="white-space: pre;">  </span>//<span style="font-family: Arial, Helvetica, sans-serif;">[a setValue:[NSNumber numberWithInt:123] forKey:@"y"]; 沒有成員變量y,報(bào)錯(cuò)</span>  

  1.     NSLog(@"x:%@",[a valueForKey:@"x"]);  

  2. }  

  3. return 0;  

輸出為


2015-01-30 11:00:37.687 Test[12583:303] x:123

可以看出即使是私有成員變量,即使沒有setter函數(shù),也是可以設(shè)置和改變的。新航道培訓(xùn)

KVC可以會(huì)優(yōu)先通過setter和getter函數(shù)進(jìn)行更改。如果沒有setter 和getter 函數(shù)則直接獲取成員變量進(jìn)行更改。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI