1. 程式人生 > >匿名物件 、面向物件的三大特徵、 getter ,setter方法 self的用法

匿名物件 、面向物件的三大特徵、 getter ,setter方法 self的用法

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];

* 小知識點*
如何找出一個類在記憶體中存放的首地址
- 找一個這個類的物件 除錯檢視isa指標
- 在這個類的類方法,列印self
- 找一個這個類的物件 呼叫[物件名 class]方法
- 直接呼叫者個類的[類名 class]方法