屬性 及 KVC 的使用

2021-07-03 19:45:35 字數 2998 閱讀 8240

屬性:

1. 在類的 .h 檔案中宣告屬性

2. 在類的 .m 檔案屬性實現

3. 在類的 .m 檔案中的@synthesize可以省略了

4. 在類的 .h 檔案中的成員變數宣告部分可以省略了

屬性的三大作用:

1. 宣告了成員變數(可見度: 私有的) 

2. 宣告了setter和getter方法

3. 實現了setter和getter方法

例子1:

person類 .h 檔案:

#import @inte***ce person : nsobject

@property (nonatomic, retain) nsstring *name;

@property (nonatomic, assign) nsinteger age;

@end

在person類的 .h 檔案中進行屬性宣告

1. 關鍵字@property

2. 屬性沒有_

3. 相當於宣告了setter和getter方法

person類 .m 檔案:

#import "person.h"

@implementation person

- (void)info

@end

在person類的 .m 檔案中進行屬性的實現

1. 關鍵字 @synthesize

2. 相當於實現了setter和getter方法

main 中:

#import #import "person.h"

int main(int argc, const char * argv)

return 0;

}

在main 中先引入標頭檔案 #import "person.h",在建立物件進行呼叫

列印結果:

name: tom, age: 10

name: tom

例子2:

car類 .h 檔案:

#import @inte***ce car : nsobject

@property (nonatomic) nsstring *name;

- (void)setname:(nsstring *)name;

- (nsstring *)name;

@end

car類 .m 檔案:

#import "car.h"

@implementation car

// 屬性 成員變數

@synthesize name = _name;

// 賦值(給成員變數_name賦值)

- (void)setname:(nsstring *)name

// 取值(獲得成員變數的值)

- (nsstring *)name

1. 如果重寫了系統的setter,getter 方法,必須加@synthesize 讓成員變數和屬性一樣  

2. setter getter 都是給成員變數賦值,不是給屬性賦值

3. setter方法是為了給成員變數_name賦值,getter方法是獲取成員變數的值

4. 不能在setter getter 方法中使用屬性只能使用成員變數

5. 在setter方法setname中:

car呼叫setname這個方法,所以self == car,self.name == car.name

反覆呼叫setname這個方法,遞迴,進入死迴圈

main 中:

#import #import "car.h"

int main(int argc, const char * argv)

return 0;

}

列印結果:

name =勞斯萊斯

kvc (key - value - coding):

1. 給屬性賦值

car *c = [[car alloc] init];

[c setvalue:@"紅旗" forkey:@"name"];

nslog(@"%@", c.name);

setvalue:@"紅旗"forkey:@"name" 中的name 與 屬性name 相同

列印結果:

紅旗

2. 字典 和 model類 的轉換

nsmutabledictionary *mdic = [nsmutabledictionary dictionary];

[mdic setobject:@"賓士" forkey:@"name"];

[mdic setobject:@"1000000" forkey:@"price"];

// c.name = [mdic objectforkey:@"name"];

[c setvaluesforkeyswithdictionary:mdic];

nslog(@"name = %@", c.name);

在car這個類中並未宣告price這個屬性,所以在轉換時在car.m 檔案中要進行糾錯

car.m 檔案中:

- (void)setvalue:(id)value forundefinedkey:(nsstring *)key

重寫父類方法

如果沒有定義這個屬性,那麼重寫這個方法,裡面什麼都不寫

通過字典給model 賦值,必須在model類裡重寫這個方法, 空著就可以

KVC的使用介紹

利用kvc進行簡單賦值 利用kvc進行綜合賦值 利用kvc修改類的私有成員變數 uipagecontrol 字典轉模型 取值把模型轉成字典 取出陣列中所有模型的某個屬性值 利用kvc進行簡單賦值 void test 利用kvc進行綜合賦值 void test2 利用kvc修改類的私有成員變數 uip...

NSDictionary 字典 KVC 的使用

字典分為不可變字典 nsdictionary 和可變字典 nsmutabledictionary 不可變字典 1.建立字典 nsdictionary dic nsdictionary dictionarywithobjectsandkeys male 20 age tom name run hobb...

鍵值編碼 KVC 簡單的KVC

main.m kvc一 created by goddog on 15 1 3.1.我們可以通過setter和getter方法來設定和修改物件的屬性,同時也可以通過鍵值編碼 kvc 來操作物件屬性。2.何為kvc 以字串的形式間接的操作物件的屬性。設定值用 setvalue 屬性值 forkey 屬...