隨意細解 OC 屬性 點語法 KVC

2021-07-06 10:27:02 字數 1518 閱讀 4826

利用屬性宣告set、get方法。學習階段,使用mrc,並在 .m 檔案中練習get、set方法的完整實現。

注意:建立工程 預設是arc狀態(自動管理記憶體)。在工程的設定中,將objective-c automatic reference counting 的 yes 改為 no,手動管理記憶體 mrc。

get、set方法的完整實現:

宣告屬性代表系統預設幫咱們實現了 setter和getter方法,並且例項變數為 _name

@property (nonatomic, retain) nsstring *name;
提供了乙個快捷的訪問屬性一種方式,快捷呼叫set、get方式。

等號左邊呼叫的是set方法,賦值用的。等號右邊呼叫的是get方法,取值用的。假設有student類:

stu.name = @"haha";

stu.name = stu.***;

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

間接方法,訪問stu的屬性,做到賦值取值。

首先看 setvalue: 的引數是不是乙個物件,因為必須要是物件型別,所以如果不是物件型別,例如基本資料型別,要用nsnumber / nsvalue將型別轉換為物件。

[stu setvalue:18 forkey:@"age"];
是錯的,應該將nsinteger 轉換為 nsnumber:

nsnumber *num = [nsnumber numberwithint:18];

[stu setvalue:num forkey:@"age"];

或者使用語法糖:

[stu setvalue:@18 forkey:@"age"];
另外:setvalue:後也可以填 nil 。

[stu setvalue:nil forkey:@"age"];
為了不使程式崩潰,必須在類中重寫- (void)setnilvalueforkey:(nsstring *)key方法:

- (void)setnilvalueforkey:(nsstring *)key

判斷屬性,傳入的key的查詢順序為:_key 、 _iskey 、key 、iskey 。如果傳入的 key 找不到一樣的屬性,程式會丟擲異常而崩潰,所以應該重寫- (void)setvalue:(id)value

forundefinedkey:(nsstring *)key方法。

[stu setvalue:@"ddddd" forkey:@"name1"];
student類中沒有 name1 的例項變數,所有程式會崩潰。要用間接賦值的保護方法:

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

OC 屬性點語法

點語法和 property 知識點一 setter和getter方法 帶上下劃線 二 點語法 乙個引數的set方法可以使用點語法賦值 xiaoxin setname 小新 這不是使用成員變數,是使用set方法 xiaoxin.name 小新 可以通過.語法呼叫get方法 nsstring ret x...

OC中關於屬性,特性,點語法的總結

synthesize 屬性的實現部分,實現屬性自動生成的setter以及getter方法.name 屬性名,指定要實現哪乙個屬性生成的setter以及getter方法 name,指定setter和getter方法內部所要操作的例項變數.如果指定的例項變數沒有定義,系統會自動生成指定的例項變數,但是生...

OC之點語法詳解

點語法的本質是對set 和get 方法的呼叫 person p person new p.age 10 上面p.age 10不是給person的成員變數age賦值,而是呼叫person中的setage方法,並傳遞引數10,所以p.age 10就相當於 p setage 10 當然也可以根據呼叫per...