iOS開發系列 UI基礎 KVC

2022-09-09 03:24:11 字數 2304 閱讀 5077

這些知識是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檔...