匿名對象 、面向對象的三大特徵、 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]方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章