OC語言自學《九》---- OC(面向對象)

定義類和建立對象

  • 建立類
    • 使用@interface 關鍵字建立類,而且使類繼承NSObject
  • @interface負責聲明、@implementation負責實現

函數和方法的區別

  • 方法
    • 必須以減號或加號開頭
    • 減號開頭的是對象方法,加號開頭的是類方法
    • 實現必須寫在@implementation和@end之間
    • 聲明必須寫在@interface和@end之間
    • 必須由對象調用
    • 歸類、對象全部
  • 函數
    • 函數調用不依賴對象
    • 函數內部不能直接經過成員變量名訪問對象的成員變量
    • 能夠寫在文件的任何地方,但不能寫在@interface中
    • 能夠寫在@implementation和@end之間,也能夠被方法調用

對象方法與類方法的區別

  • 對象方法
    • 減號開頭
    • 只能由對象調用
    • 實例變量不能在類方法中訪問
    • 對象方法能夠調用類方法
  • 類方法
    • 加號開頭
    • 只能由類來調用
    • 應用場合:當方法內部不須要使用成員變量時,就能夠改成使用類方法

self關鍵字

  • self是指針類型
  • 它指向了方法調用者,誰調用了這個方法就指向誰
  • 用途:
    • 能夠利用 self -> 成員變量名 訪問當前對象內部的成員變量
    • [self 方法名]能夠調用其餘對象方法、類方法,取決於self在什麼環境中
    • self出如今對象方法中,self就表明對象
    • self出如今類方法中,self就表明類
  • 要避免本身調用本身的方法而發生死循環,例若有個test方法
    • [self test];    //死循環
  • 避免在類方法中使用self調用對象方法

super關鍵字

  • super的做用
    • 直接調用父類中的某個方法
    • super處在對象方法中,name就會調用父類的對象方法
    • super處在類方法中,那麼就會調用父類的類方法
  • super的使用場合
    • 子類重寫父類的方法時,想保留父類的一些行爲(方法)

常見錯誤

  • @end不能嵌套
  • 方法的聲明不能寫在@implementation裏面
  • 方法的實現不能寫在@interface裏面
  • @interface是配對出現的,中間不能嵌套任何東西
  • 成員變量不容許在@interface裏面進行初始化
  • 不能隨便把成員變量當成C語言中的變量
  • 不能用static修飾成員變量和方法
  • 類的聲明要放在建立對象前面

面向對象的三大特性

  • 封裝

    • 設置setter方法
    • 設置getter方法
    • 成員變量要與getter和setter方法參數變量區別開來,成員變量要與_下劃線開頭
    • OC是弱語言,因此只寫實現不寫聲明,方法照樣能夠運行,可是不推薦這麼使用

  • 繼承

    • 全部類的根類都是NSObject
    • 繼承使用冒號:符號表示,冒號左邊是子類,右邊是父類(SuperClass)超類
    • 繼承的好處
      • 抽取重複的代碼
      • 創建了類之間的關係
      • 子類能夠擁有父類中全部成員變量和方法
    • 繼承的壞處
      • 產生依賴,耦合度高
      • 修改一處容易牽扯多處
    • 使用注意
      • 父類的類聲明必須寫在子類的聲明前面,實現能夠寫在後面
      • 重寫:子類從新實現父類中的某個方法,並覆蓋父類方法
      • 子類不能和父類擁有相同的成員變量
      • new方法是在NSObject中定義的類方法
      • NSObject是基類
    • 繼承使用的場合
      • 當兩個類擁有相同屬性和方法的時候,就能夠將相同的東西抽取到一個父類中
      • 當A類擁有B類的部分屬性和方法時,能夠考慮讓B類繼承A類
    • 組合
      • 當A類不是B類的子類,可是又要使用B類,能夠考慮組合,將B類型聲明爲成員變量在A中

  • 多態

    • 沒有繼承就沒有多態
    • 代碼的體現:父類類型的指針指向子類對象,例如:
      • Person *p = [Student new];    //此時p指向子類Student的實例
    • 多態的好處
      • 若是函數、方法參數中使用時是父類型,能夠傳入父類、子類對象
    • 多態的侷限
      • 父類類型的變量不能直接調用子類特有的方法
      • 父類只能調用父類和子類都有的方法,可是經過強制轉換爲子類型,就能夠調用
    • 使用注意
      • 不能將子類類型轉換爲父類類型

NSString字符串類型

  • OC中使用%@控制符號輸出NSSString字符串內容到屏幕上
    • 示例:建立一個字符串
    • NSString *str = @「luoguankun」;
  • length方法
    • 獲取字符串的長度
    • 返回unisgned long
  • stringWithFormat
    • 動態建立字符串,根據傳入的值
    • 返回NSString
    • 示例:
NSString *newstr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@「,age,no,name];
相關文章
相關標籤/搜索