国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

iOS學(xué)習(xí)筆記(6)鍵值編碼——KVC

2019-11-14 20:14:00
字體:
供稿:網(wǎng)友

  在KVC編程方式中,無論調(diào)用setValue:forKey:方法,還是調(diào)用valueForKey:方法,都是通過NSString對象來指定被操作屬性,其中forKey:標(biāo)簽用戶傳入屬性名的。

  對于setValue:屬性值forKey@“name”;代碼,底層的執(zhí)行機(jī)制如下。

  (1)程序優(yōu)先考慮調(diào)用“setName:屬性值;”代碼通過setter方法完成設(shè)置。

  (2)如果該類沒有setName:方法,KVC機(jī)制會搜索該類名為_name的成員變量,無論該成員變量是在類接口部分定義,還是在類實(shí)現(xiàn)部分定義,也無論用哪個訪問控制符修飾,這條KVC代碼頂層實(shí)際上就是對_name成員變量賦值。

  (3)如果該類既沒有setName:方法,也沒有定義_name成員變量,KVC機(jī)制會搜索該類名為name的成員變量,無論該成員變量是在類接口部分定義,還是在類實(shí)現(xiàn)部分定義,也無論用哪個訪問控制符修飾,這條KVC代碼頂層實(shí)際上就是對name成員變量賦值。

  (4)如果上面3條都沒有找到,系統(tǒng)將會執(zhí)行該對象的setValue:forUndefinedKey:方法。

 

  對于valueForKey:@name;代碼,底層的執(zhí)行機(jī)制如下。

  (1)程序優(yōu)先考慮調(diào)用“name;”代碼來獲取該getter方法的返回值。

  (2)如果該類沒有name方法,KVC機(jī)制會搜索該類名為_name的成員變量,無論該成員變量是在類接口部分定義,還是在類實(shí)現(xiàn)部分定義,也無論用哪個訪問控制符修飾,這條KVC代碼頂層實(shí)際上就是返回_name成員變量的值。

  (3)如果該類既沒有name方法,也沒有定義_name成員變量,KVC機(jī)制會搜索該類名為name的成員變量,無論該成員變量是在類接口部分定義,還是在類實(shí)現(xiàn)部分定義,也無論用哪個訪問控制符修飾,這條KVC代碼頂層實(shí)際上就是返回name成員變量的值。

  (4)如果上面3條都沒有找到,系統(tǒng)將會執(zhí)行該對象的valueForUndefinedKey:方法。

  提示:

  (1)默認(rèn)的setValue:forUndefinedKey:方法和valueForUndefinedKey:方法實(shí)現(xiàn)就是引發(fā)一個異常,這個異常將會導(dǎo)致程序因?yàn)楫惓=Y(jié)束。如果不想因?yàn)椴淮嬖趉ey而結(jié)束程序,可以重寫這兩個方法。

  (2)當(dāng)程序嘗試為某個屬性設(shè)置nil值時,如果該屬性并不接受nil值,那么程序?qū)詣訄?zhí)行該對象的setNilValueForKey:方法。如果為了自行制定這個行為,可以通過重寫setNilValueForKey:方法實(shí)現(xiàn)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄢陵县| 孝昌县| 桃江县| 金乡县| 武安市| 新郑市| 台山市| 玛多县| 石阡县| 新源县| 桃源县| 江孜县| 前郭尔| 吴忠市| 玉龙| 南木林县| 离岛区| 壤塘县| 青州市| 巴林右旗| 天祝| 托克托县| 景泰县| 长泰县| 思南县| 丹寨县| 高阳县| 广灵县| 闵行区| 烟台市| 许昌市| 习水县| 富川| 福泉市| 本溪市| 黄平县| 玉溪市| 白沙| 会东县| 治县。| 陕西省|