設計模式–觀察者模式
設計模式是用來解決某一特定問題
1.什麼是觀察者模式?
在工程中,一些類去觀察『a』類,當『a』類發生改變時,這些類就收到訊息,做出相應反應。
2.什麼時候使用觀察者模式
當乙個類需要傳送訊息給多個類時,就使用觀察者模式
3.觀察者模式的作用
一對多的訊息傳送
4.oc中觀察者模式設計基礎:kvc和kvo。
在oc中,可以通過屬性或者直接設定例項變數來直接更改物件狀態。也就是通過@public將類中的屬性設定為公開、通過設定器setter對變數進行賦值、或者通過@property定義為類的屬性再進行賦值。除了這些方法以外,還有一種方法——kvc(key-value coding),kvc提供了一種在執行時而非編碼時動態訪問物件屬性與例項變數的方法,也就是說,可以通過字串內容作為屬性名稱或者例項變數名稱進行訪問。
1.kvc
1)在介面檔案中宣告三個變數
@property(nonatomic, strong)nsstring *address;
一般,通過以上方式宣告的變數,其中_name,_age因為沒有設定器,且作用域為private,所以一般不能在類以外對其進行設值。通過kvc的使用,則解決了這個問題。
在主函式中:
//設值
[stu1 setvalue:@"gene"
forkey:@"_name"];
[stu1 setvalue:@"23"
forkey:@"_age"];
[stu1 setvalue:@"fs"
forkey:@"_address"];
//訪問
nsstring *name = [stu1 valueforkey:@"_name"];
nsnumber *age = [stu1 valueforkey:@"_age"];
nsstring *address = [stu1 valueforkey:@"_address"];
在動態訪問一些屬性時,使用一些可以執行時而不是編譯時改變的值,在類中定義屬性p1,並建立乙個方法,如果傳進@「p1」,則返回p1的值。
//inte***ce檔案
-(int)getvaluepropertyname:(nsstring *)name
//main
int b = [stu1 getvaluepropertyname:@"p1"];
2)鍵路徑編碼
通過setvalue…forkeypath進行設定。新建乙個book類,其中包含有屬性「_bookname」;
[stu1 setvalue:book forkeypath:@"_book"];
//通過父類取出子類的值的時候,需要使用keypath
[stu1 setvalue:@"悲傷逆流成河"
forkeypath:@"_book._bookname"];
nsstring *bookname = [stu1 valueforkeypath:@"_book._bookname"];
OC高階語法之KVC和KVO的學習
這是oc語法中重要的部分,學習者絕對不能因為想偷懶而不學這個。一 鍵值編碼kvc key value coding 相對kvo,這個比較簡單。1.最基本的kvc由nskeyvaluecoding協議提供支援,基本的操作屬性的兩個方法 setvlaue 屬性值 forkey 屬性名 這是為指定屬性設定...
kvc和kvo的區別
on 2012 年 6 月 7 日,in iphone,by donly kvc 與 kvo 是 objective c 的關鍵概念,個人認為必須理解的東西,下面是例項講解。乙個物件擁有某些屬性。比如說,乙個 person 物件有乙個 name 和乙個 address 屬性。以 kvc 說法,per...
KVC和KVO底層原理
kvc和kvo想必都熟知的乙個名詞,觀察者模式,而kvo是基於kvc的,那麼kvc到底是個什麼,kvo又是什麼,那麼它們之間是怎麼關聯的。當你了解kvc機制,會恍然大悟,只要知道乙個ui的結構,就能對他做任意的修改。而kvo是觀察者模式的一種實現,對物件屬性監聽能達到乙個高效能處理,所以了解kvc和...