匿名物件 、面向物件的三大特徵、 getter ,setter方法 self的用法
阿新 • • 發佈:2019-02-20
OC基礎day04
- 匿名物件
- 什麼是匿名物件?
- 建立一個物件 而不用一個指標來接收它的地址
- 匿名物件的語法
[Person new];
[Person person];
[Person personWithName:@"張三"];
- 匿名物件在開發中的用處
- 特點: 匿名物件由於沒有指標指向 所以只能訪問一次
- 如果一個物件 只需要使用一次 那麼就可以使用匿名物件
面向物件的三大特徵
- 封裝
- 繼承
- 多型
setter方法對屬性賦值做邏輯驗證
- 當一個類的屬性用 @public 修飾的時候
- 在當前類的外部可以使用 物件名->_屬性 直接訪問
- 這樣不能保證 賦值的資料的正確性和合理性
- 解決方案
- 把@public去掉,為了在類的外部 類的物件不能直接訪問成員屬性
- 寫一個方法 目的是可以操作成員屬性
-(void)setAge:(int)age;
- 必須是 “ - ” 開頭
- 返回值必須是void
- 方法名必須是set開頭 去掉下劃線首個字母大寫的屬性名
- 必須有引數 而且引數的型別必須和要操作的屬性型別一致
- 引數名字必須是去掉下劃線的屬性名
- 在類的外部通過類的物件 就不能直接操作成員屬性 只能呼叫setter方法來訪問成員屬性
getter方法取到物件的屬性的值
- 把@public去掉後 類的外部 類的物件就不能獲取成員屬性的值了
- 解決方案:
- 為了在提供一個方法 來獲取成員屬性的值
-(int)age;
- 必須是一個” - “開頭的方法
- 返回值型別必須和要獲取的實行的型別一致
- 方法名 必須是去掉下劃線的成員屬性
- 必須沒有引數
- 在類的外部 通過類的物件呼叫這個方法即可獲得返回值
- 為了在提供一個方法 來獲取成員屬性的值
屬性的封裝規範
- 只讀書封裝
- 只能通過getter方法獲取屬性的值
- 直接getter方法 而不懈setter方法
- 只寫封裝
- 只能通過setter設定屬性的值
- 只寫setter方法 不寫getter
- 就算沒有任何資料處理的程式碼,也要對任何成員屬性進行封裝
“只要寫一個類,類中的所有成員屬性,必須要有getter或者setter方法
* 類與類之間的關係*
- 組合關係
- 物件A是有其他若干個物件組合而成的,這些物件是物件A的一個部分
- eg: 人 是由 頭 腳 等類組合而成
- 依賴關係
- 類A中有一個方法需要物件B做引數, 此時物件A和物件B就是依賴關係
- 遛狗: 人依賴於狗
- 打電話 人依賴於電話
- 關聯關係
- 物件A中有物件B作為屬性 但是A不是有B組成的
static關鍵字
- C語言中 static 修飾區域性變數 表示把區域性變數裝換成靜態變數, 函式執行完畢之後函式不會被回收下次接著使用(延長區域性變數的壽命, 在程式結束之後會被釋放)
- C語言中 static 修飾全域性變量表示這個全域性變數只能在當前檔案中使用
- C語言中 static 修飾函式表示這個函式只能在房錢檔案中使用
- OC中 static不能修飾類的屬性 也不能修飾方法
self的用法
- 什麼是self?
- self是一個指標 儲存的地址
- self怎麼用?
- 在物件方法中 self儲存的是當前物件的地址
- 在類方法中 self儲存的是當前類的地址
- 使用場景
- self在物件方法中
- 如果物件方法中有和屬性同名的區域性變數
- 這時候要訪問當前物件的屬性,必須要使用 self->成員變數名“注意 一般區域性變數不要以”_”開頭”
- 如果在物件方法中要呼叫當前物件的其他方法 那就必須用self,
- 格式 [self 其他方法名];
- 如果物件方法中有和屬性同名的區域性變數
- self在類方法中
- 如果在類方法中需要呼叫當前類的其他類方法 可以使用self
- [self/當前類名 其他類方法名];
- 如果在類方法中 要建立物件 可以使用self
-[self/當前類名 new];
- 如果在類方法中需要呼叫當前類的其他類方法 可以使用self
- self在物件方法中
* 小知識點*
如何找出一個類在記憶體中存放的首地址
- 找一個這個類的物件 除錯檢視isa指標
- 在這個類的類方法,列印self
- 找一個這個類的物件 呼叫[物件名 class]方法
- 直接呼叫者個類的[類名 class]方法