OC第八天 屬性

2021-07-06 10:24:39 字數 4273 閱讀 8260

⼀、屬性。

屬性是objective-c 2.0定義的語法,為例項變數提供了setter、 getter⽅法的預設實現

能在⼀定程度上簡化程式**,並且增強例項變數的訪問安全性。

屬性的定義

屬性的宣告:使⽤@property宣告屬性

@property nsstring *name;

相當於@inte***ce中宣告了兩個⽅法(setter、getter):

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

- (nsstring *)name;

屬性的實現

屬性的實現:使⽤@synthesize實現屬性

例如:@synthesize name = _name;

相當於@implementation實現了setter、getter

- (void)setname:(nsstring *)name

- (nsstring *)name

//預設屬性的實現

關鍵字@synthesize

//喝茶

set get

方法//

相當於實現

set get

方法//

等號前面

代表你宣告的屬性的名稱 //

等號後面

代表你要賦值的成員變數名稱

@synthesize

name =

_name

;⼆、屬性的attribute.

屬性的屬性

objective-c提供屬性的⺫的是為了簡化程式設計師編碼

為屬性提供了⼀些關鍵字⽤以控制setter、getter的實現細節

這些關鍵字我們稱為屬性的屬性(attribute)

⼀共3⼤類attribute。

第⼀類:讀寫性控制(readonly、readwrite、setter、getter)

readonly,告訴編譯器,只宣告getter⽅法(⽆setter⽅法)。

例如:@property(readonly)nsstring *name;

//等價於 - (nsstring *)name;

readwrite,告訴編譯器,既宣告setter⼜宣告getter。

例如: @property(readwrite)nsstring *name;

//等價於 - (nsstring *)name; - (void)setname:(nsstring *)name;

readwrite是讀寫性控制的預設設定。

第⼆類:原⼦性控制(nonatomic、atomic)

atomic。setter、getter⽅法在多執行緒訪問下是絕對安全的,即 setter、getter內部做了多執行緒訪問處理。原⼦性控制的預設設定是 atomic

nonatomic。setter、getter⽅法內部不會做多執行緒訪問處理,僅僅是 普通的setter、getter⽅法

程式開發過程中,setter、getter處處都在⽤,如果使⽤atomic,需要不斷 的對setter、getter加鎖解鎖以保證執行緒訪問安全,會很佔⽤系統資源,降低 系統效能。

通常設定為nonatomic,某些屬性需要執行緒安全的時候,才定義為atomic。

第三類:語義設定(assign、retain、copy)

例如:@property(nonatomic,assign)nsstring *name;

- (void)setname:(nsstring *)name

- (nsstring *)name

retain。setter、getter的內部實現會做記憶體優化。

例如:@property(nonatomic,retain)nsstring *name;

- (void)setname:(nsstring *)name

} - (nsstring *)name

copy。setter、getter的內部實現也會做記憶體優化。

例如:@property(nonatomic,copy)nsstring *name;

- (void)setname:(nsstring *)name

} - (nsstring *)name

如果屬性是⾮物件型別(⽐如int,float等)屬性的語義設定使⽤ assign。

如果屬性是物件型別(⽐如nsstrng、nsarray等)屬性的語義設 置使⽤retain。

如果屬性是物件型別並且想得到引數的copy,使⽤copy關鍵字。

// 屬性的屬性

// 讀寫類屬性

// readonly 唯讀(

系統就不會預設生成

set方法

)// readwrite 讀寫(

如果什麼都不寫

預設就是讀寫

)// setter

設定給set

指定名字

// getter

設定get

指定名字

// 原子類屬性

// nonatomic

必寫沒有多執行緒保護

// 第三類:語義設定(

assign

、retain

、copy

)// 注意:

建立工程

預設是arc狀態(

自動管理記憶體

)//

手動管理記憶體

mrc// assign set get

方法的實現

是直接賦值的

一般咱們用

宣告基本資料型別時候使用

// retain set get

方法的實現

內部實現對記憶體管理的優化

物件型別宣告為

retain

// copy

與retain

一樣但是宣告成

copy

有乙個先決條件必須遵守

nscopying

協議並且實現其方法

三、點語法。

點語法是objective-c 2.0中定義的語法格式。提供了⼀種便捷的 屬性訪問⽅式。

凡是符合系統預設setter、getter書寫格式的⽅法都可以使⽤點語 法。

屬性是⼀對getter、setter⽅法,點語法是屬性的另⼀種調⽤格式。

// 點語法

提供了一種快捷的訪問屬性一種方式

// 快捷

呼叫set get方式

// =

左邊是呼叫

set =

右邊是get

四、kvc

kvc(key-value-coding),鍵值編碼,是⼀種間接訪問例項變數的⽅ 法。

key:鍵,⽤於標識例項變數

vlaue:例項變數對應的值

setvalue:forkey:

setvalue:forkeypath:

setvalue:forundefinedkey:

setvaluesforkeyswithdictionary:

// 通過字典賦值乙個物件

valueforkey:

valueforkeypath:

valueforundefinedkey:

當key不存在的時候,會執⾏setvalue:forundefinedkey:

系統預設實現是丟擲⼀個異常

// 如果你使用間接訪問的方法

訪問屬性的話需要重寫

// setvalue: forundefinedkey:

//防止在系統丟擲異常時候呼叫防止系統崩潰

//間接賦值的保護方法

//捕獲間接訪問屬性時填錯的

key和

value

// 傳人的

key的查詢順序

// _key _iskey key iskey

// 復合

// 本類中包含

其他類的乙個物件

作為例項變數

// forkeypath

這個方法

相當於跨一級去間接訪問屬性

是訪問本類中屬性的屬性

通過這個方法去訪問的話需要傳入乙個

//路徑

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

////-(void)setnilvalueforkey:(nsstring *)key//

總結屬性是objective-c的重要語法,屬性是⼀組getter、setter⽅法,內 部對例項變數進⾏操作。

點語法是⼀種屬性的另外⼀種調⽤格式。

kvc是⼀種間接訪問例項變數的⽅法。

開課第八天

開課第八天,今天因為遲到問題被老師訓了,呵呵,說實話是真的感覺前一周有點懶散鬆懈,今天被訓之後又感覺到了緊迫感,嗯,堅持就是勝利,加油。上午講題,下午講新知識,以下就是本寶寶吸收的新養料 方法 可以被稱作函式,也可以被稱作功能。1 main 是我們學習的第乙個簡單的方法,public static ...

彙編第八天

彙編形式目標 main proc push ebp mov ebp,esp 建立堆疊框架 push offset msg 匯入引數位址 call printf 呼叫函式 xor eax,eax 返回0 pop epb 扯掉框架 ret 0 返回主程式 main endp 結束 1.條件語句 cmp ...

前端第八天

迴圈繫結的變數汙染 在進行事件迴圈變數繫結時,由於函式體內部 並未執行,在繫結結束後,呼叫函式時,賦予的部分變數失去意義,解決方案 給頁面元素新增乙個任意屬性 事件與已有的函式進行繫結 只需要將函式位址繫結給事件,事件繫結完成將會有系統在特定情況下自動觸發 物件 字典 的增刪改查 物件元素格式為字串...