一、點語法
1> 基本使用
2> 使用注意
二、PRoperty和synthesize關(guān)鍵字
1> @property
作用
① 自動生成某個成員變量的set方法和get方法
使用注意
① 只能出現(xiàn)在@interface中② 可以使用逗號運算符為多個同類型的成員變量生成setter和getter③ 為了與點語法匹配,使用@property的成員變量不要以下劃線開頭④ @property可以同時完成@synthesize的任務(wù)⑤ @property默認生成的成員變量是@private類型的以下劃線開頭
2> @synthesize
作用
① 自動生成某成員變量的setter和getter的實現(xiàn)② 可以指定要訪問的成員變量的名字,通常是以下劃線開頭
使用注意
① 只能出現(xiàn)在@implimentation中② 可以使用都好運算符同時生成多個setter和getter的實現(xiàn)③ 若未指定要訪問的成員變量,默認會訪問生成@synthesize后名字一 樣的成員變量④ 若訪問的成員變量未找到,將會自動生成@private類型的以下劃線 開頭(或與@synthesize后名字一樣的)的成員變量
三、id類型
1> 基本含義
2> 使用注意
四、構(gòu)造方法
1> 作用
2> 關(guān)于+new方法
+alloc方法和-init方法
① +alloc方法 1)返回值為id類型 2)為對象分配內(nèi)存空間,并返回該對象② -init方法 1)返回值為id類型 2)初始化當(dāng)前對象,并返回初始化好的對象
3> 重寫-init方法的步驟
調(diào)用super的-init方法
① 初始化父類中的成員變量和其他屬性② 返回當(dāng)前對象,并賦值給self③ 根類將isa指針初始化為最初調(diào)用init方法的類
返回初始化完畢的對象
4> 自定義-init方法
適用場合
① 當(dāng)初始化成員變量時,需要將成員變量初始化不同的值,通常需要自定義-init方法,將指定的值作為-init方法的參數(shù)
規(guī)范
① 一定是對象方法,以-開頭② 返回值一定是id類型③ 方法名一定以init開頭
五、分類(category)
1> 作用
2> 定義
3> 使用注意
六、NSString類
1> NSString *與char *
NSString *
① NSString /*指向OC字符串對象的指針② NSString是OC字符串類封裝了字符串相關(guān)操作的方法
char *
① char /*創(chuàng)建的是指向C語言字符或字符串的指針② char /*只能存儲字符指針或字符串指針,沒有相關(guān)操作
2> NSString與NSMutableString
3> NSString的方法
NSString的子類必須實現(xiàn)的兩個方法
① -length 對象方法,獲取字符串的長度② -characterAtIndex: 對象方法,獲取字符串指定索引位置的字符
初始化方法
① +(NSString*)stringWithString: 類方法,創(chuàng)建一個字符串常量,在 Xcode6.0中已經(jīng)沒有該方法,用字符串常量直接創(chuàng)建② +(NSString*)stringWithFormat: 類方法,合成一個新的字符串③ -(NSString*)initWithString: 對象方法,在字符串對象初始化時,為其賦值一個字符串常量④ -(NSString*)initWithFormat: 對象方法,在字符串對象初始化時,為其賦值一個新合成的字符串
讀取文件中字符串的方法
+(NSString*)stringWithContentsOfFile: encoding: error: 類方法
獲取網(wǎng)絡(luò)中字符串的方法
+(NSString*)stringWithContentsOfURL: encoding: error: 類方法
字符串操作的方法
① 獲取字符串指定范圍的子串 -(NSString *)substringWithRange: 對象方法,NSRange是結(jié)構(gòu)體 類型,返回子串② 將字符串中指定范圍內(nèi)的子串替換為指定的字符串 -(NSString *)stringByReplacingCharactersInRange: withString: 對象方法,返回行的字符串③ 求子串在母串中的范圍 -(NSRange)rangeOfString: 對象方法,返回NSRange類型④ 比較兩個字符串內(nèi)容是否相同 -(BOOL)isEqualToString:(NSString *)aString 對象方法,返回BOOL 類型⑤ 比較兩個字符串的大小 -(NSComparisonResult)compare:(NSString *)aString 對象方法, 返回NSComparisonResult枚舉類型⑥ 用指定的字符串分割字符串 -(NSArray *)componentsSeparatedByString:(NSString *)separator 對象方法,返回NSArray數(shù)組類型指針
七、description方法
1> 基本使用
2> +description與-description
+description方法
① 類方法,默認輸出格式為:類名② 返回值為NSString *類型
-description方法
① 對象方法,默認輸出格式為<類名:內(nèi)存地址>② 返回值為NSString *類型③ 不要在-description方法中用NSLog函數(shù)一%@格式輸出self
八、SEL類型
1> 基本使用
含義
① SEL本質(zhì)上是一個指針類型的數(shù)據(jù)② 保存的是方法的地址
作用
① 將方法包裝成SEL類型的數(shù)據(jù)② 每個對應(yīng)一個唯一的SEL類型數(shù)據(jù)③ 通過SEL類型的數(shù)據(jù)可以間接調(diào)用類/對象方法
2> 通過SEL類型間接調(diào)用方法的方式
通過方法名間接調(diào)用
① @selector(方法名),返回一個與參數(shù)對應(yīng)的SEL類型的數(shù)據(jù)② performSelector:(SEL),通過SEL類型的數(shù)據(jù)間接的調(diào)用類/對象方 法③ performSelector:(SEL) WithObject:(id),通過SEL類型數(shù)據(jù)調(diào)用含 參數(shù)的類/對象方法
通過字符串形式的方法名間接調(diào)用
① NSSelectorFromString: 將字符串類型的方法名轉(zhuǎn)換成該方法對應(yīng)的 SEL類型的數(shù)據(jù)② NSStringFromSelector: 將SEL類型的數(shù)據(jù)轉(zhuǎn)換成字符串類型的方法 名③ 通過轉(zhuǎn)化得到到SEL類型數(shù)據(jù),再間接調(diào)用方法
3> _cmd的使用
九、示例
/* 1.創(chuàng)建一個Person類,屬性:name; 2.自定義init方法,在初始化是制定每個Person對象的name 3.為Person類添加一個包含運動方法的分類,名字為Sports 4.重寫-description方法,使其輸出Person對象時,輸出該對象的name屬性 5.通過SEL間接調(diào)用方法 */#import <Foundation/Foundation.h>/*****定義Person類*****/@interface Person : NSObject//用@propert聲明成員變量,且省略@synthesize@property NSString *name;/*自定義構(gòu)造方法,在Person對象被初始化時給成員變量name賦予制定的值*/- (id)initWithName:(NSString *)name;//判斷兩個人的名字是否相同- (void)isSameName:(Person *)p;@end/***Person類的實現(xiàn)***/@implementation Person- (NSString *)description{ return self.name;}- (id)initWithName:(NSString *)name{ self.name = name; return self;}- (void)isSameName:(Person *)p{ /*調(diào)用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的實現(xiàn)**/@implementation Person (Sports)- (void)playTableTennis{ NSLog(@"/n%@正在打乒乓球", self);}- (void)playBasketball{ NSLog(@"/n%@正在打籃球", self);}@end/*****測試函數(shù)main*****/int main(){ @autoreleasepool { //定義兩個字符串,用于存放兩個名字 NSString *str = @"Tom"; NSString *str2 = @"Jack"; //定義兩個Person對象,并調(diào)用重寫的構(gòu)造方法 Person *p = [[Person alloc] initWithName:str]; Person *p2 = [[Person alloc] initWithName:str2]; //通過方法名間接調(diào)用方法 [p performSelector:@selector(isSameName:) withObject:p2]; //通過字符串形式的方法名間接調(diào)用方法 [p performSelector:NSSelectorFromString(@"playBasketball")]; } return 0;}
新聞熱點
疑難解答