一、KVC(key value code)的基本概念和用法?
?1、基本概念? ? ? ??
1)鍵-值編碼是一個用于間接訪問對象屬性的機制,使用該機制不需要調用存取方法和變量實例就可以訪問對象屬性 ? ??
2)通過KVC可以給readonly的屬性賦值,? ? ??
3)如果對象屬性為基本數據類型時,我們存的時候需要將數據封裝為NSNumber類型,系統內部存取時,系統會自動封裝/解封? ? ??
4)如果沒有用@property聲明,他講在內部查找名為_key或key的實例變量? ? ??
5)路徑? ? ? 除了通過鍵值設置值外,鍵/值編碼還支持指定路徑,通過.號隔開? ? ??
6)一對多的關系? ? ? 如果向NSArray請求一個鍵值,它實際上會查詢數組中的每個對象來查找這個鍵值,然后將查詢結果打包到另一個數組中并返回給你。? ? ??
7)可以應用字符做簡單運算,sum/min/max/avg/count? ? ??
8)存取值格式? ? ? ? 存值? ? ? ? ? setValue:forKey:? ? ? ? ? setValue:forKeyPath:? ? ? ? 取值? ? ? ? ? valueForKey:? ? ? ? ? valueForKeyPath:??
2、適用情況:將服務器的內容轉化為數據模型,能夠簡化代碼??
?3、練習? ? ? 定義一個Person對象,他叫喬布斯,他有許多蘋果設備:? ? ? 1個macbook,價格8000? ? ? 1個iPhone, 價格5000? ? ? 1個iPad, 價格3800? ? ? 使用kvc為Person設置名字, 使用kvc計算喬布斯所有設備的總價。? ?
?二、KVO(Key-Value-Observer)的基本概念和用法? ??
1、基本概念? ? ? 一種使對象獲取其他獨享的特定屬性變化的通知機制? ??
2、適用情況? ? ? 主要用于試圖,交互方面,比如界面的某些數據變化了,界面的顯示也需要跟著變化,就需要建立數據和界面的關聯? ??
3、實現步驟? ? ??
1)采用下面這個方法給屬性添加觀察者,在哪里注冊觀察者就要在哪里移除觀察者? ? ? ? ? - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;? ? ? 2)觀察者實現下面方法,如果監聽的屬性發生變化,便會調用該方法。? ? ? ? ? - (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary*)change context:(nullable void *)context;
3)個人習慣在delloc中釋放
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath context:(nullable void *)context;
4、練習:
監聽狗的動作,做相應的回應
三、通知的基本概念和用法
1、基本概念
1)一種一對多的信息廣播機制,一個應用程序同時只能有一個NSNotificationCenter對象
2)任何人都可以發送任何消息到消息中心,識別感興趣通知的標示就是object+通知名稱
2、適用情況
類與類之間傳遞信息
3、實現步驟
1)添加通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(paySalary) name:@"發工資啦" object:nil];
2)實現添加通知時方法選擇器選擇的方法
3)在需要發送通知的類中采用下面方法發送通知,發送成功便會執行步驟二實現的方法
[[NSNotificationCenter defaultCenter] postNotificationName:@"發工資啦" object:nil];
4)移除通知
[[NSNotificationCenter defaultCenter] postNotificationName:nil object:nil userInfo:nil];
4、練習
模擬應用程序的通知