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