OC8 屬性 KVC是鍵值編碼

2022-08-30 01:36:10 字數 1575 閱讀 2286

1.屬性,是oc提供的一種快速的模式化的建立例項變數的方式。

(1)屬性是通過@property標記的,

(2)屬性會在背後,默默的幫我們做set和get方法

2.屬性做的工作

(1)建立乙個例項變數,名字是下劃線加屬性名,

(2)幫我們自動get和setter 的方式,建立一組方法,

3.點語法,點語法是專門為了setter 和getter 方法配備的一種語法糖。會自動根據語法和語境呼叫是哪一種方法,

(1) (.)其實就是轉換成了getter 和setter 方法,p.hobby.length.字串的長度。

(2)沒有getter 和setter 方法的例項變數是沒有辦法使用點語法的。

4.屬性的屬性,

attibute,在我們通過屬性來建立例項變數的時候,可以通過屬性的屬性設定來控制例項變數的生成和方法的建立,

3種(1)原子性控制(2)讀寫控制(3)記憶體管理控制。第 1和3種引數必須指定,否則會產生記憶體洩漏,

(1)原子性,原子是最小單位,atomic是oc中的一種執行緒保護技術,是防止在未完成的時候,被另乙個執行緒使用,造成資料錯誤。 但是耗記憶體,推進使用nonatomic

(2)讀寫  分唯讀,可讀可寫。  預設是可寫可讀的許可權。

(3)修改setter getter 方法名:

1)setter getter 是控制生成的get和set 方法的方法名屬性

2)對應的getter 方法還是會自動生成,只是名字換成了我們通過引數傳遞進去的那個名字。

3)在修改setter 的時候,新的名字後面要加(:),否則會報錯,getter 後面不需要加(:),

(4)記憶體控制屬性 

1)記憶體管理控制屬性。assign,retain/strong,copy,沒有垃圾**,通過引用計數,**記憶體,

2)現在xcode預設的事arc,自動引用計數||另外一種是mrc(手動記憶體管理,)  arc下使用的是strong,mrc下使用的是retain.

3)怎麼將arc改成mrc?  去工程的配置檔案。buildsetting 搜尋 (arc]) (gar),在選項中講yes 修改為no.

(5)使用原則 

1)若屬性的型別是基本資料型別,使用assign,

2)若屬性的型別存放在堆區的,絕大部分用retain,個別的有特殊需求的需要填寫copy.

5.assign 的具體實現:

(1)@synthesize age=_age;建立乙個例項變數,變數的名字是( _age),和屬性的age產生關聯,

(2) set 和get方法的實現

6.kvc是鍵值編碼 key-value-code

(1)作用:是oc提供的一種賦值方式,可以無視訪問許可權,kvc通過鍵值對進行物件例項變數的賦值。

setvalue forkey會自動呼叫父類裡面的這個方法,將傳過來的value的值賦給key對應的例項變數,如果在賦值的過程中發現沒有例項變數,會再去呼叫一遍setvaluue for undifinnedkey;

(2)實現的意義,通過字典,實現批量的資料儲存。

[p1 setvaluesforkeyswithdictionary:dic];kvc 的生命力,是它存在的意義。

隨意細解 OC 屬性 點語法 KVC

利用屬性宣告set get方法。學習階段,使用mrc,並在 m 檔案中練習get set方法的完整實現。注意 建立工程 預設是arc狀態 自動管理記憶體 在工程的設定中,將objective c automatic reference counting 的 yes 改為 no,手動管理記憶體 mrc...

屬性 及 KVC 的使用

屬性 1.在類的 h 檔案中宣告屬性 2.在類的 m 檔案屬性實現 3.在類的 m 檔案中的 synthesize可以省略了 4.在類的 h 檔案中的成員變數宣告部分可以省略了 屬性的三大作用 1.宣告了成員變數 可見度 私有的 2.宣告了setter和getter方法 3.實現了setter和ge...

OC中鍵值程式設計(KVC)的實現

key value coding kvc 是用來使得乙個類的行為擺脫它需要依附執行的特定屬性的一種方式。它通常與nskeyvaluecoding協議聯絡在一起當然也有一系列其他的方法來實現相同的效果。在這篇文章中,我關注為什麼kvc是重要的而且要介紹5種不同的方式來實現這個功能。介紹 nskeyva...