定義類和建立對象
- 建立類
- @interface負責聲明、@implementation負責實現
函數和方法的區別
- 方法
- 必須以減號或加號開頭
- 減號開頭的是對象方法,加號開頭的是類方法
- 實現必須寫在@implementation和@end之間
- 聲明必須寫在@interface和@end之間
- 必須由對象調用
- 歸類、對象全部
- 函數
- 函數調用不依賴對象
- 函數內部不能直接經過成員變量名訪問對象的成員變量
- 能夠寫在文件的任何地方,但不能寫在@interface中
- 能夠寫在@implementation和@end之間,也能夠被方法調用
對象方法與類方法的區別
- 對象方法
- 減號開頭
- 只能由對象調用
- 實例變量不能在類方法中訪問
- 對象方法能夠調用類方法
- 類方法
- 加號開頭
- 只能由類來調用
- 應用場合:當方法內部不須要使用成員變量時,就能夠改成使用類方法
self關鍵字
- self是指針類型
- 它指向了方法調用者,誰調用了這個方法就指向誰
- 用途:
- 能夠利用 self -> 成員變量名 訪問當前對象內部的成員變量
- [self 方法名]能夠調用其餘對象方法、類方法,取決於self在什麼環境中
- self出如今對象方法中,self就表明對象
- self出如今類方法中,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方法
- stringWithFormat
- 動態建立字符串,根據傳入的值
- 返回NSString
- 示例:
NSString *newstr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@「,age,no,name];