這些知識是ui初級學習的,目前我還在學習中,適合初學者看
kvc—key value coding 也就是鍵值編碼 是一種獲取值和設定值的方式
當我們建立乙個類檔案,為這個類設定成員屬性的時候:
建立乙個「人」類:有名字(name), 年齡(age)兩個公有的成員屬性:
因為使用@property關鍵字,會在hfperson.m中,直接生成setter(設定值) 、getter(獲取值)方法,也就是對應的點語法。因為兩個成員屬性是公有的,我們可以在任何地方訪問這些屬性 例如我在main.m中,建立乙個人類物件,給name屬性賦值
那麼既然有了setter和getter方法,為什麼還要有kvc獲取值和設定值的方法呢?
下面介紹一下kvc比普通setter 和 getter 方法強大的地方
我在hfperson.m檔案中新增乙個延展,也就是人類的私有屬性***(性別)屬性,
此時我們用斷點看一下,人類物件中是有***屬性
下面我在main.m中給p1物件設定***屬性,看看會出現什麼情況:
我們是沒有辦法在別的類中訪問本類的私有屬性的,那麼我現在想實現在main.m中獲取或者設定***屬性,那麼怎麼實現呢?
下面介紹kvc第乙個強大的地方:
在kvc眼中,沒有私有屬性,任何屬性都可以訪問的到,那麼我們用kvc在main.m中設定p1物件的***屬性,並且獲取***屬性
此時我們通過kvc給p1的***私有屬性,設定了值,也獲取到了值,這是setter getter無法做到的,
這個方法名字:- (void)setvalue:(nullable id)value forkey:(nsstring *)key;
下面介紹一下方法:- (void)setvalue:(nullable id)value forkeypath:(nsstring *)keypath;這個方法可以實現上面方法的功能,那麼和上面的方法有什麼區別呢?
現在有乙個新的需求:建立乙個「書」(book)類,這個類中有乙個名字(bookname)私有屬性,此時我給剛才建立的人類新增乙個(book)物件屬性
接下來,我在main.m中建立書物件,賦值給p1物件的book屬性
現在有乙個新的需求,如何通過p1設定或者獲取book的私有屬性(bookname)的值?普通點語法肯定做不到
那麼我用- (void)setvalue:(nullable id)value forkey:(nsstring *)key;方法呢
book.bookname 不是p1物件的屬性成員。book是p1物件的屬性成員,而bookname是book的屬性成員 那麼這個時候怎麼通過p1直接修改bookname呢?
使用- (void)setvalue:(nullable id)value forkeypath:(nsstring *)keypath;方法
介紹一下這個方法,[p1 setvalue:@"九陰真經" forkeypath:@"book.bookname"];使用這個方法的時候,它會認為 . 前面是乙個物件,這個物件是p1物件的成員屬性, . 後面是這個物件的成員屬性。這是這個方法獨有的功能;
接下來,介紹一下第二個強大的功能:
就先介紹這幾個功能吧,目前就學了這幾個,以後有新的發現,會及時更新的。
第一次寫部落格,希望大家能看懂。
iOS開發之UI基礎 KVC
k vc key value coding 1.字典轉模型 dic answer dic icon dic title dic options kvc 把字典中的值,賦給當前物件制定的屬性 answer self setvalue dic answer forkeypath answer 遍歷字典中...
IOS開發UI基礎 倒影
1.用複製圖層實現,搞個uiimageview展示,然後複製uiimageview.2.注意 複製圖層只能複製子層,但是uiimageview只有乙個主層,並沒有子層,因此不能直接複製uiimageview.3.正確做法 應該把uiimageview新增到乙個uiview上,然後複製uiview的層...
IOS開發UI基礎之綜合應用
好處 inte ce viewcontroller property nonatomic,strong nsarray shops end implementation viewcontroller 重寫getter方法 nsarray shops return shops end 獲取plist檔...