麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

OC語言-04-OC語言-核心語法

2019-11-14 18:32:09
字體:
供稿:網(wǎng)友

一、點語法

1> 基本使用

  • 點語法本質(zhì)上是set方法/get方法的調(diào)用

2> 使用注意

  • 若出現(xiàn)在賦值操作符的右邊,在執(zhí)行時會轉(zhuǎn)換成get方法
  • 若出現(xiàn)在賦值操作符的左邊,在執(zhí)行時會轉(zhuǎn)換成set方法
  • 不能在set、get方法中用self使用點語法,會造成死循環(huán)

二、PRoperty和synthesize關(guān)鍵字

1> @property

  1. 作用

    ① 自動生成某個成員變量的set方法和get方法
  2. 使用注意

    ① 只能出現(xiàn)在@interface中② 可以使用逗號運算符為多個同類型的成員變量生成setter和getter③ 為了與點語法匹配,使用@property的成員變量不要以下劃線開頭④ @property可以同時完成@synthesize的任務(wù)⑤ @property默認生成的成員變量是@private類型的以下劃線開頭

2> @synthesize

  1. 作用

    ① 自動生成某成員變量的setter和getter的實現(xiàn)② 可以指定要訪問的成員變量的名字,通常是以下劃線開頭
  2. 使用注意

    ① 只能出現(xiàn)在@implimentation中② 可以使用都好運算符同時生成多個setter和getter的實現(xiàn)③ 若未指定要訪問的成員變量,默認會訪問生成@synthesize后名字一  樣的成員變量④ 若訪問的成員變量未找到,將會自動生成@private類型的以下劃線  開頭(或與@synthesize后名字一樣的)的成員變量 

三、id類型

1> 基本含義

  • 萬能指針,可以指向任何OC對象
  • 可以理解為NSObject *

2> 使用注意

  • id在定義變量時不要加上符號*,其本身已經(jīng)包含

四、構(gòu)造方法

1> 作用

  • 用來初始化對象,返回一個初始化好的對象

2> 關(guān)于+new方法

  1. +new等價于+alloc方法和-init方法
  2. +alloc方法和-init方法

    ① +alloc方法	1)返回值為id類型	2)為對象分配內(nèi)存空間,并返回該對象② -init方法	1)返回值為id類型	2)初始化當(dāng)前對象,并返回初始化好的對象

3> 重寫-init方法的步驟

  1. 調(diào)用super的-init方法

    ① 初始化父類中的成員變量和其他屬性② 返回當(dāng)前對象,并賦值給self③ 根類將isa指針初始化為最初調(diào)用init方法的類
  2. 進行子類成員變量的初始化
  3. 返回初始化完畢的對象

4> 自定義-init方法

  1. 適用場合

    ① 當(dāng)初始化成員變量時,需要將成員變量初始化不同的值,通常需要自定義-init方法,將指定的值作為-init方法的參數(shù)
  2. 規(guī)范

    ① 一定是對象方法,以-開頭② 返回值一定是id類型③ 方法名一定以init開頭

五、分類(category)

1> 作用

  • 在不改變原來類的基礎(chǔ)上為類擴充一些方法
  • 通常作用與大型的類,將類的不同類型的方法,寫在不同的分類中

2> 定義

  • 分類的定義與類的定義相似,在類名后面用小括號指明分類的名字
  • 分類通常以模塊命名

3> 使用注意

  • 分類只能為類擴充方法,不能擴充成員變量
  • 分類方法的實現(xiàn)中可以訪問原來類中的成員變量
  • 在分類中實現(xiàn)原來類的方法,會造成原來類中方法的實現(xiàn)失效
  • 調(diào)用方法時,優(yōu)先在分類中查找,然后在原來類中查找,最后才在父類中查找
  • 在原來類的多個分類查找方法時,優(yōu)先在最后編譯的分類中查找

六、NSString類

1> NSString *與char *

  1. NSString *

    ① NSString /*指向OC字符串對象的指針② NSString是OC字符串類封裝了字符串相關(guān)操作的方法
  2. char *

    ① char /*創(chuàng)建的是指向C語言字符或字符串的指針② char /*只能存儲字符指針或字符串指針,沒有相關(guān)操作

2> NSString與NSMutableString

  • NSString創(chuàng)建的字符串對象是不可改變的,NSMutableString創(chuàng)建的字符串對象是可改變的

3> NSString的方法

  1. NSString的子類必須實現(xiàn)的兩個方法

    ① -length 對象方法,獲取字符串的長度② -characterAtIndex: 對象方法,獲取字符串指定索引位置的字符
  2. 初始化方法

    ① +(NSString*)stringWithString: 類方法,創(chuàng)建一個字符串常量,在  Xcode6.0中已經(jīng)沒有該方法,用字符串常量直接創(chuàng)建② +(NSString*)stringWithFormat: 類方法,合成一個新的字符串③ -(NSString*)initWithString: 對象方法,在字符串對象初始化時,為其賦值一個字符串常量④ -(NSString*)initWithFormat: 對象方法,在字符串對象初始化時,為其賦值一個新合成的字符串
  3. 讀取文件中字符串的方法

    +(NSString*)stringWithContentsOfFile: encoding: error: 類方法
  4. 獲取網(wǎng)絡(luò)中字符串的方法

    +(NSString*)stringWithContentsOfURL: encoding: error: 類方法
  5. 字符串操作的方法

    ① 獲取字符串指定范圍的子串	-(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> 基本使用

  • ,會調(diào)用相應(yīng)的description方法
  • 可以重寫description方法,使其能夠通過類/對象名輸出期望的信息

2> +description與-description

  1. +description方法

    ① 類方法,默認輸出格式為:類名② 返回值為NSString *類型
  2. -description方法

    ① 對象方法,默認輸出格式為<類名:內(nèi)存地址>② 返回值為NSString *類型③ 不要在-description方法中用NSLog函數(shù)一%@格式輸出self

八、SEL類型

1> 基本使用

  1. 含義

    ① SEL本質(zhì)上是一個指針類型的數(shù)據(jù)② 保存的是方法的地址
  2. 作用

    ① 將方法包裝成SEL類型的數(shù)據(jù)② 每個對應(yīng)一個唯一的SEL類型數(shù)據(jù)③ 通過SEL類型的數(shù)據(jù)可以間接調(diào)用類/對象方法

2> 通過SEL類型間接調(diào)用方法的方式

  1. 通過方法名間接調(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ù)的類/對象方法
  2. 通過字符串形式的方法名間接調(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的使用

  • _cmd代表當(dāng)前方法對應(yīng)的SEL類型數(shù)據(jù)
  • 不能在方法中通過_cmd間接調(diào)用方法,會引發(fā)死循環(huán)

九、示例

/* 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;}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产一区二区三区久久久 | 久久影院国产精品 | h视频免费在线观看 | 亚洲成人网一区 | 免费看污视频在线观看 | 久久91久久 | 欧美aⅴ视频 | 午夜精品久久久久久中宇 | 国产精品久久久久久久av | 欧美精品一级 | 久草在线资源观看 | 九色91视频 | 9797色| 国产 一区 精品 | 一区二区三区黄色 | 久久狂草 | 欧美黑大粗硬毛片视频 | 精品一区二区电影 | 国产影院一区 | 国产精品久久久久久久久久电影 | 国产1区视频 | 一级做受大片免费视频 | 成人在线免费视频观看 | 日本教室三级在线看 | 成人免费久久 | avav在线播放 | 免费观看黄视频 | 国产乱一区二区三区视频 | 欧美日韩高清一区二区三区 | 黄视频免费在线 | 久久精品亚洲欧美日韩精品中文字幕 | 欧美视频一区二区三区四区 | 国产三级国产精品国产普男人 | 一区二区三级视频 | 免费观看一区二区三区视频 | 日本高清黄色片 | 免费黄色大片网站 | 男男啪羞羞视频网站 | 5a级毛片 | av噜噜在线 | 九一免费国产 |