OC,oc語言
一、點文法
1> 基本使用
2> 使用注意
- 若出現在賦值操作符的右邊,在執行時會轉換成get方法
- 若出現在賦值操作符的左邊,在執行時會轉換成set方法
- 不能在set、get方法中用self使用點文法,會造成死迴圈
二、property和synthesize關鍵字
1> @property
2> @synthesize
三、id類型
1> 基本含義
- 萬能指標,可以指向任何OC對象
- 可以理解為NSObject *
2> 使用注意
四、構造方法
1> 作用
2> 關於+new方法
3> 重寫-init方法的步驟
4> 自訂-init方法
五、分類(category)
1> 作用
- 在不改變原來類的基礎上為類擴充一些方法
- 通常作用與大型的類,將類的不同類型的方法,寫在不同的分類中
2> 定義
- 分類的定義與類的定義相似,在類名後面用小括弧指明分類的名字
- 分類通常以模組命名
3> 使用注意
- 分類只能為類擴充方法,不能擴充成員變數
- 分類方法的實現中可以訪問原來類中的成員變數
- 在分類中實現原來類的方法,會造成原來類中方法的實現失效
- 調用方法時,優先在分類中尋找,然後在原來類中尋找,最後才在父類中尋找
- 在原來類的多個分類尋找方法時,優先在最後編譯的分類中尋找
六、NSString類
1> NSString *與char *
2> NSString與NSMutableString
- NSString建立的字串對象是不可改變的,NSMutableString建立的字串對象是可改變的
3> NSString的方法
七、description方法
1> 基本使用
- ,會調用相應的description方法
- 可以重寫description方法,使其能夠通過類/對象名輸出期望的資訊
2> +description與-description
八、SEL類型
1> 基本使用
2> 通過SEL類型間接調用方法的方式
九、樣本
/* 1.建立一個Person類,屬性:name; 2.自訂init方法,在初始化是制定每個Person對象的name 3.為Person類添加一個包含運動方法的分類,名字為Sports 4.重寫-description方法,使其輸出Person對象時,輸出該對象的name屬性 5.通過SEL間接調用方法 */#import <Foundation/Foundation.h>/*****定義Person類*****/@interface Person : NSObject//用@propert聲明成員變數,且省略@synthesize@property NSString *name;/*自訂構造方法,在Person對象被初始化時給成員變數name賦予制定的值*/- (id)initWithName:(NSString *)name;//判斷兩個人的名字是否相同- (void)isSameName:(Person *)p;@end/***Person類的實現***/@implementation Person- (NSString *)description{ return self.name;}- (id)initWithName:(NSString *)name{ self.name = name; return self;}- (void)isSameName:(Person *)p{ /*調用NSString的對象方法isEqualToString 判斷兩個人的名字是否相同*/ if ([self.name isEqualToString:p.name]) { NSLog(@"\n這兩個人的名字都為:%@", self); } //通過重寫的description方法通過對象名輸出該對象的屬性 NSLog(@"\n這兩個人的名字分別為:%@\t%@", self, p);}@end/****為Person類增加一個分類****/@interface Person (Sports)//為Person類添加打乒乓球這個方法- (void)playTableTennis;//為Person類添加打籃球這個方法- (void)playBasketball;@end/**Person的分類Sports的實現**/@implementation Person (Sports)- (void)playTableTennis{ NSLog(@"\n%@正在打乒乓球", self);}- (void)playBasketball{ NSLog(@"\n%@正在打籃球", self);}@end/*****測試函數main*****/int main(){ @autoreleasepool { //定義兩個字串,用於存放兩個名字 NSString *str = @"Tom"; NSString *str2 = @"Jack"; //定義兩個Person對象,並調用重寫的構造方法 Person *p = [[Person alloc] initWithName:str]; Person *p2 = [[Person alloc] initWithName:str2]; //通過方法名間接調用方法 [p performSelector:@selector(isSameName:) withObject:p2]; //通過字串形式的方法名間接調用方法 [p performSelector:NSSelectorFromString(@"playBasketball")]; } return 0;}