您好,登錄后才能下訂單哦!
KVC(鍵值編碼)和OC 字典很相似,都是鍵值存儲(chǔ)。但是OC 字典比較靈活,它是一種映射。
[dict setObject:<#(id)#> forKey:<#(id<NSCopying>)#>]
int main(int argc, const charchar * argv[])
{
@autoreleasepool
{
NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];
[dict setObject: @"1a23" forKey:[NSNumber numberWithInt:123]];//<span style="font-family: Arial, Helvetica, sans-serif;">[NSNumber numberWithInt:123] 存放在常量區(qū)(堆、棧、常量、寄存器、代碼區(qū)、全局區(qū))</span>
NSLog(@"y:%@",[dict objectForKey:[NSNumber numberWithInt:123]]);
}
return 0;
}
其輸出結(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ò)。
@interface ClassA : NSObject
{
@private
NSNumber* _x;
}
@property(nonatomic,retain,readonly) NSNumber* x;
@end
#import "ClassA.h"
int main(int argc, const charchar * argv[])
{
@autoreleasepool
{
ClassA *a=[[ClassA alloc] init];
[a setValue:[NSNumber numberWithInt:123] forKey:@"x"];
<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>
NSLog(@"x:%@",[a valueForKey:@"x"]);
}
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)行更改。
免責(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)容。