日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

使用KVC

發(fā)布時(shí)間:2025/7/14 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用KVC 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

KVC是Key Value Coding的簡(jiǎn)稱,意思是鍵值編碼,號(hào)稱Cocoa的大招。它是一種可以直接通過字符串key(對(duì)象在名稱)來訪問或修改對(duì)象屬性的機(jī)制。


使用

1.利用KVC可以隨意修改一個(gè)對(duì)象的屬性或者成員變量(私有的也可以修改)。

其中,key為被修改對(duì)象的名稱或者其成員變量名稱。

#import <UIKit/UIKit.h>@interface MainTabBarController : UITabBarController @end @implementation MainTabBarController- (void)viewDidLoad {[super viewDidLoad]; // ZTTabBar是自定義的tabBar,這里要修改系統(tǒng)空間為自定義tabBar ZTTabBar *tabBar = [[ZTTabBar alloc] init]; // self.tabBar = tabBar; 這里會(huì)報(bào)錯(cuò),原因tabBar為readonly,所以這里考慮使用KVC。 [self setValue:tabBar forKeyPath:@"tabBar"]; } @end

2.KVC: forKey、forKeyPath的區(qū)別,建議使用forKeyPath

下面有兩個(gè)示例類:

  • Person類:name,age,dog及dogs四個(gè)屬性;
  • Dog類:name,number兩個(gè)屬性。
    (這個(gè)人很喜歡養(yǎng)狗)
  • 類:Person
    .h

    #import <Foundation/Foundation.h>@class Dog; @interface Person : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) int age; @property (nonatomic, strong) Dog *dog; @property (nonatomic, strong) NSArray *dogs; - (void)printHeight; @end

    .m

    #import "Person.h"@implementation Person { @private double _height; // 身高 } @end

    類Dog
    .h

    #import <Foundation/Foundation.h>@interface Dog : NSObject @property (nonatomic, copy) NSString *name; //名字 @property (nonatomic, assign) Int *number; //數(shù)量 @end

    .m

    #import "Dog.h"@implementation Dog @end

    使用KVC修改屬性:

    - (void)testKVC {Person *p = [[Person alloc] init];// 1.propertyp.name = @"rose";p.age = 20;p.dog = [[Dog alloc] init];p.dog.name = "旺財(cái)"; // 2.forkey [p setValue:@"jack" forKey:@"name"]; [p setValue:@30 forKey:@"age"]; [p.dog setValue:@"旺福" forKey:@"name"]; //Person對(duì)象的私有變量_height,對(duì)兩個(gè)key:height\_height,任意一個(gè)key都可以修改其屬性。 //(對(duì)于height,KVC先從內(nèi)存中尋找對(duì)應(yīng)名為height的屬性,如果找不到就會(huì)自動(dòng)尋找_height,然后進(jìn)行相應(yīng)的修改) [p setValue:@1.80 forKey:@"height"]; [p setValue:@1.85 forKey:@"_height"]; // 3.forKeyPath // forKeyPath包含了forKey的功能,以后使用forKeyPath就可以了。 // forKeyPath可以利用‘ . ’運(yùn)算符一層一層往下查找對(duì)象的屬性 [p setValue:@"jack" forKeyPath:@"p.name"]; [p setValue:@30 forKeyPath:@"p.age"]; [p setValue:@"哈士奇" forKeyPath:@"dog.name"]; NSLog(@"%d %@", p.age, p.name); }

    3. KVC取值

    - (void)useKVCGetValue {Person *p = [[Person alloc] init];p.dog = [[Dog alloc] init];[p setValue:@"妞妞" forKeyPath:@"dog.name"]; NSLog(@"%@", [p valueForKeyPath:@"dog.name"]); }

    4.KVC Tips

    - (void)test {Person *p = [[Person alloc] init];Dog *dog1 = [[Dog alloc] init];dog1.name = @"中華田園犬"; // 看家還得看土狗dog1.number = 3; Dog *dog2 = [[Dog alloc] init]; dog2.name = @"哈士奇"; // 二貨,這玩意不能多養(yǎng) dog2.number = 1; Dog *dog3 = [[Dog alloc] init]; dog3.name = @"柴犬"; dog3.number = 4; Dog *dog4 = [[Dog alloc] init]; dog3.name = @"薩摩耶"; dog3.number = 3; Dog *dog5 = [[Dog alloc] init]; dog5.name = @"黑背"; dog5.number = 3; p.dogs = @[dog1, dog2, dog3, dog4, dog5]; 1. tip1:取指定數(shù)組 // 取出dogs數(shù)組中每一個(gè)元素的name屬性值,放到一個(gè)新的數(shù)組中返回 NSArray *dogNames = [p valueForKeyPath:@"dogs.name"]; 2.tip2: @sum(求和),@avg(求平均數(shù)),更多tip請(qǐng)百度。 // 計(jì)算所有狗的個(gè)數(shù) NSNumber *dogsNumber = [p valueForKeyPath:@"dogs.@sum.number"]; NSLog(@"%@", sumNumber); }

    總結(jié)

  • key的值必須正確,如果拼寫錯(cuò)誤,會(huì)出現(xiàn)異常;
  • valueForKey\ valueForKeyPath 方法根據(jù)key的值讀取對(duì)象的屬性,setValue:forKey:\ forKeyPath: 是根據(jù)key的值來寫對(duì)象的屬性;
  • 推薦使用 valueForKeyPath \ setValue:forKeyPth;
  • 當(dāng)key的值是沒有定義的,valueForUndefinedKey:這個(gè)方法會(huì)被調(diào)用,如果重寫了這個(gè)方法,就可以獲取錯(cuò)誤的key值。


  • 原文鏈接:http://www.jianshu.com/p/0e358f18950e

    總結(jié)

    以上是生活随笔為你收集整理的使用KVC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色噜噜亚洲| 大胸喷奶水www视频妖精网站 | 97视频 | 国产又黄又猛又粗 | 日本免费一级片 | 亚洲国产精品成人av | 黄在线免费观看 | 欧美成人女星 | 精品在线二区 | aa级黄色片| 成人深夜小视频 | 高清乱码免费看污 | 国产日韩在线播放 | 四虎在线免费观看视频 | 日韩一级在线视频 | 久久午夜神器 | 永久免费快色 | 九七电影院97理论片 | www日本在线观看 | 色播久久 | 国产乱淫av一区二区三区 | 日韩免费视频一区二区 | 欧美日韩精品在线 | 午夜插插 | 成人在线视频网 | 美女一区二区三区 | 色爱亚洲 | 亚洲美女福利视频 | 亚洲青青草| 丰满少妇在线观看资源站 | 青青草视频免费观看 | 你操综合 | 男人的网站在线观看 | 四虎网站在线观看 | 亚洲精品白浆高清久久久久久 | 婷婷色视频 | 天天爱夜夜爱 | 日本一区二区不卡视频 | 国产在线v | 污污的网站在线免费观看 | 男生裸体视频 | 国产黄网站 | 欧美亚洲国产另类 | 99久久久无码国产精品不卡 | 国产精品99久久久久久动医院 | 中国女人一级片 | 中文字幕亚洲第一 | 国产网站在线免费观看 | 另类小说亚洲色图 | 欧美成人免费 | 裸体一区二区三区 | 精品欧美乱码久久久久久1区2区 | 精品国产欧美 | 中文久久字幕 | 乱亲女h秽乱长久久久 | 三上悠亚一区二区在线观看 | 人妻少妇精品视频一区二区三区 | 亚洲激情视频在线 | 欧美一区二区三区久久妖精 | 欧美一a一片一级一片 | 黑人操日本女优 | 色噜噜狠狠一区二区三区牛牛影视 | 日韩播放| 日韩高清不卡一区 | 国产精品偷伦视频免费观看了 | 观看毛片| 久久免费视频99 | 69中国xxxxxxxxx69 国产又爽又色 | 日韩国产欧美综合 | 二区三区在线视频 | 国产精品v日韩精品v在线观看 | 韩国一区二区在线播放 | 亚洲欧美一区二区精品久久久 | 亚洲成人一级片 | 久久精品人妻一区二区三区 | 国产欧美视频在线播放 | 婷婷丁香综合 | 人妻饥渴偷公乱中文字幕 | 日本免费在线一区 | 人人曰| 手机av免费在线 | 国模精品视频一区二区 | 日韩专区一区二区三区 | 99国内揄拍国内精品人妻免费 | 樱空桃在线 | 国产中文字幕一区二区 | 日韩一区二区不卡视频 | 自拍偷拍精品视频 | 内射中出日韩无国产剧情 | 色网址在线观看 | 少妇高潮一区二区三区99欧美 | 亚洲成人精品久久久 | 在线观看中文字幕第一页 | 蜜臀av性久久久久蜜臀aⅴ | 成人黄色大全 | 国产噜噜噜噜噜久久久久久久久 | 九色国产视频 | 看片网站在线观看 | 久久久久久久国产精品美女 |