KVC 和 KVO

作者?沖破繭縛?2015.08.28 16:12*
寫了3967字,被8人關注,獲得了14個喜歡

KVC 和 KVO

字數363?閱讀32?評論0?

KVC

  • (Key Value Coding),鍵值編碼,通過鍵值(字符串)來訪問屬性的機制,來間接修改屬性值
  • 使用方法
    • 賦值?setValue:forKey:
      • 例如:[person setValue:@"Jack" forKey:@"name"];,執行這個方法時會優先調用setName:方法,如果沒有這個方法,則會直接修改name或者_name這個成員變量
    • 取值?valueForKey:
      • 例如:id name = [person valueForKey:@"name"];,執行這個方法時會優先調用name方法,如果沒有這個方法,則會直接讀取name或者_name這個成員變量

KVO

  • (Key Value Observing),監聽模型屬性值的改變
 //cc監聽了aa的name屬性的改變
[aa addObserver:cc forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];// cc得實現監聽方法 /** * 當監聽到object的keyPath屬性發生了改變 */ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"監聽到%@對象的%@屬性發生了改變, %@", object, keyPath, change); } //退出時移除監聽的屬性 - (void)dealloc { [self.p1 removeObserver:self forKeyPath:@"name"]; }
  • KVO是基于Runtime機制實現的
  • 當對象執行完addObserver:forKeyPath: options:context:后,系統會在運行期動態創建一個新的子類,并將對象的isa指針指向該類,該類會重寫set方法,set方法里面先實現super的set方法,再調用監聽器的observeValueForKeyPath: ofObject: change: context:方法通知監聽器屬性值發生改變
?推薦拓展閱讀

轉載于:https://www.cnblogs.com/baiwulong/p/5489593.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255325.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Atmel megaAVR控制器 串行引導Bootloader

開始研究下Bootloader的代碼結構 2015.1.9 粗略看了下,Bootloader主要做了下板卡的初始化 -----> 然后進入for( ; ; )死循環 -----> 循環刷新串口數據 -----> 根據數據做出不同應答 -----> 如果有寫數據,則將數據存入buffer …

MapReduce入門2-流量監控

3、流量監控匯總(使用LongWritable實現) hdfs文件路徑:/tmp/flow.txt 查看文件內容: 13770759991 50 100 25 400 13770759991 800 600 500 100 13770759992 400 300 250 1400 13770759992 800 1200 600 900字符串含義:…

【fiddler學習問題記錄】——手機端證書下載頁打不開、無法將此證書安裝(已解決)

目錄 1、手機端下載頁打不開 解決方法1)電腦端——將網絡設置成公用(親測有效) 解決方法2)手機端將fiddler設置為信任應用,不被攔截 (未試) 2、無法將此證書安裝 方法一:修改證書…

HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析

HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析 示例程序源碼(加注釋) 介紹: ball.hdev: Inspection of Ball Bonding *halcon窗口實時更新關閉 dev_update_window (‘off’) *halcon關閉所有窗口 dev_close_window () *halcon打開…

舵機的原理和控制

控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出…

HDFS清理壞塊

報錯 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner將PDM導出生成WORD文檔或者html文件

a) 使用PowerDesigner打開pdm文件 b) 點擊Report Temlates 制作模板 點擊PowerDesigner菜單欄“Report” -> “Report Templates” c) 選擇模板數據項 完成步驟a),得到如下界面,左右2個區,Aavailable區…

【軟件測試】——基礎篇(軟件測試技術體系、過程管理)

目錄 軟件測試技術體系 軟件測試過程管理?編輯 接口測試用例設計 手機端測試流程?編輯 軟件測試技術體系 軟件測試過程管理 接口測試用例設計 手機端測試流程

vue 的常用模塊安指令(持續記錄)

# 全局安裝 vue-cli $ cnpm install --global vue-cli# 創建一個基于 webpack 模板的新項目 $ vue init webpack my-project # 路由管理模塊 $ npm install vue-router --save # 狀態管理模塊 $ npm install vuex --save # 網絡請求模塊 $ npm install vue-resource --save # 停…

HALCON基于形狀匹配詳解

HALCON基于形狀的模板匹配詳細說明 很早就想總結一下前段時間學習HALCON的心得,但由于其他的事情總是抽不出時間。去年有過一段時間的集中學習,做了許多的練習和實驗,并對基于HDevelop的形狀匹配算法的參數優化進行了研究,寫了一…

俄羅斯:自由軟件在這里生根

2008年6月15日,我在“俄羅斯:自由軟件在這里起飛“一文中介紹了自由軟件在俄羅斯的發展情況。現在,許多年過去了,實際情況如何呢? 回顧以往,俄羅斯境內自由軟件的精英們,在2001年組建了ALTLinux…

小米出招黑科技,5S或成全球首款”Under glass“指紋識別手機

這一次,小米PK蘋果,小米勝。 不得不說,最近的手機圈真是熱鬧,繼三星Note 7爆炸、蘋果iPhone 7發布一度成為新聞熱點之后,小米又來暗戳戳地搶風頭了。 最近小米即將發布的兩款新旗艦消息扎堆,其中基本已經確…

sql中實現取得某字段中數字值

ALTER function [dbo].[GetNum](a nvarchar(4000)) returns nvarchar(4000) as begin while patindex(%[^0-9]%,a)>0 begin set astuff(a,patindex(%[^0-9]%,a),1,) end--select a --299 return a end 例如: 轉載于:https://www.cnblogs.com/fish-ycq/p/6433562.ht…

Java 中 String 的常用方法(二)

本文介紹剩下的一些常用的 String 中的方法。 1、replace 方法 、replaceFirst 方法和 replaceAll 方法 replace(char oldChar, char newChar)Returns a string resulting from replacing all occurrences of oldChar in this string with newChar. replace(CharSequence targe…

【adb錯誤修復】adb version(39) doesn‘t match the client(40),killing...

問題原因: 由于服務端的adb版本和客戶端的adb版本不一樣【哪個是客戶端哪個是服務端我也不清楚】 解決方法: adb kill-serveradb start-server

HALCON示例程序ball電路板焊點識別、檢測、測量程序2剖析(與上篇文章使用了不同方法)

HALCON示例程序ball電路板焊點識別、檢測、測量程序2 示例程序源碼(加注釋) *這是關于顯示的函數,已經介紹過了 dev_update_off () *定義一個字符串變量ImageNames,ImageNames[0]的含義為’die/die_02’以此類推 ImageNames : ‘…

arduino 程序的機制

從一個簡單的 arduino 程序說起: /*BlinkTurns on an LED on for one second, then off for one second, repeatedly.This example code is in the public domain.*/// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led 13;// the…

電池技術多年沒有較大發展,成為移動設備最大制約

各大廠商致力于發展閃充技術以此解決電池續航問題。 對于電子產品來說,不管是什么,我們最頭疼的無疑就是電池問題了。而電池的重要性更是不用多說,但是,以目前的科技水平來看,就拿智能手機的CPU等功能來說&#xff0c…

什么樣的數據應該放入緩存

把數據放入緩存,有三個標準: 1.數據量不大 2.訪問頻率高 3.數據更改頻率低轉載于:https://www.cnblogs.com/hwgok/p/5494915.html

VMWare 安裝 Eclipse

由于之前已經安裝了 OpenJDK 所以 這次我們可以直接下載 eclipse來安裝。 Eclipse 下載:http://www.eclipse.org/downloads/?osTypelinux&releaseundefined 如果下載后 在 下載目錄,運行解壓 (我下載的:eclipse-inst-lin…