国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

[好程序員訓(xùn)練營(yíng)]Objective-C學(xué)習(xí)筆記---構(gòu)造函數(shù)和析構(gòu)函數(shù)

2019-11-14 18:56:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

<A href="http://***/" target="blank">ios培訓(xùn)</A>------我的OC語(yǔ)言筆記,期待與您交流!  

 

  簡(jiǎn)單的講,構(gòu)造函數(shù)就是在創(chuàng)建一個(gè)對(duì)象的時(shí)候起到初始化的作用,對(duì)這個(gè)對(duì)象里的一些成員變量進(jìn)行初始化,析構(gòu)函數(shù)就是在對(duì)象被刪除進(jìn)行一些清理工作,也就是專(zhuān)門(mén)的掃尾工作,下面用代碼來(lái)進(jìn)行具體說(shuō)明。

 

一、構(gòu)造函數(shù)

  在OC中凡是已init開(kāi)頭的函數(shù)我們都稱(chēng)之為構(gòu)造函數(shù),在聲明構(gòu)造函數(shù)的時(shí)候,不帶參數(shù)的一般直接聲明為“-(id)init”,帶參數(shù)的一般聲明為“-(id)initWith...”。

 1 @interface Person:NSObject{ 2 @PRivate 3     int age; 4     NSString *name; 5 } 6 -(id)init;                   //不帶參數(shù)的構(gòu)造函數(shù) 7 -(id)initWithname:(NSString *)newname age:(int)newage;   //帶參數(shù)的構(gòu)造函數(shù) 8  9 @end10 11 12 @implementation Person13 14 -(id)init{15     self = [super init];16     if(self){17        name = @“xiaoming”;18        age = 20;19     }20     return self;21 }22 23 -(id)initWithname:(NSString *)newname age:(int)newage{24      if(self=[super init]){25         age = newage;26         name = newname; 27     }   28     return self;29 }30 int main(int argc, const char * argv[]) {31 32     Person *p1 = [[Person alloc] init];              //對(duì)象生成后調(diào)用初始化函數(shù)    33     Person *P2 = [[Person alloc] initWithnam:(NSString *)xiaohong age:19];34     //調(diào)用帶參數(shù)的構(gòu)造函數(shù)進(jìn)行初始化35     return 0;36 }

這段代碼里,在Person類(lèi)中聲明了,兩個(gè)初始化函數(shù),第一個(gè)帶參數(shù)第二個(gè)不帶參數(shù),在對(duì)對(duì)像進(jìn)行初始化的時(shí)候,帶參數(shù)的初始化函數(shù)顯得更為靈活,里面的初始值可以自己改動(dòng)。

 

二、析構(gòu)函數(shù)

  析構(gòu)函數(shù)聲明為“-(void)dealloc”這個(gè)函數(shù)我們不能通過(guò)對(duì)象去人為的調(diào)用它,析構(gòu)函數(shù)會(huì)在對(duì)像快要死的時(shí)候自己運(yùn)行,來(lái)看代碼。

 1 @interface Person:NSObject{ 2 @private 3     int age; 4     NSString *name; 5 } 6 -(void)dealloc;                    //聲明析構(gòu)函數(shù),析構(gòu)函數(shù)只能有一個(gè) 7 @end 8  9 10 @implementation Person      //實(shí)現(xiàn)Person 類(lèi)11 -(void)dealloc{12     NSLog(@"this is dealloc function");13     [super dealloc];14 }15 16 @end17 18 Person *xiaoming = [Person alloc];19 [xiaoming release];

  在代碼的第六行我們聲明了析構(gòu)函數(shù),并且在第11行處我們對(duì)其進(jìn)行了復(fù)寫(xiě),這個(gè)函數(shù)會(huì)在執(zhí)行[xiaoming release];的時(shí)候運(yùn)行,因?yàn)閞elease函數(shù)就是銷(xiāo)毀對(duì)象。

 

注意:有時(shí)候我們復(fù)寫(xiě)dealloc函數(shù)的時(shí)候加上[super dealloc];會(huì)出現(xiàn)錯(cuò)誤

這是因?yàn)锳RC是iOS 5推出的新功能,全稱(chēng)叫 ARC(Automatic ReferenceCounting)。簡(jiǎn)單地說(shuō),就是代碼中自動(dòng)加入了retain/release,原先需要手動(dòng)添加的用來(lái)處理內(nèi)存管理的引用計(jì)數(shù)的代碼可以自動(dòng)地由編譯器完成了。該機(jī)制在iOS 5/ Mac OS X 10.7 開(kāi)始導(dǎo)入,利用 Xcode4.2可以使用該機(jī)制。簡(jiǎn)單地理解ARC,就是通過(guò)指定的語(yǔ)法,讓編譯器(LLVM3.0)在編譯代碼時(shí),自動(dòng)生成實(shí)例的引用計(jì)數(shù)管理部分代碼。有一點(diǎn),ARC并不是GC,它只是一種代碼靜態(tài)分析(StaticAnalyzer)工具。

解決辦法:雙擊中間的工程名稱(chēng),進(jìn)入build setting

將中間的Objective-C Automatic Reference Counting改為no就OK了!

 


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新邵县| 饶阳县| 崇义县| 富阳市| 虞城县| 高青县| 宜宾市| 兰溪市| 呼和浩特市| 庐江县| 郁南县| 乌兰县| 南部县| 南木林县| 大丰市| 成武县| 邹城市| 大名县| 临海市| 桂阳县| 图们市| 武平县| 正安县| 绵竹市| 辽阳县| 合江县| 长顺县| 昌宁县| 喜德县| 读书| 平泉县| 克什克腾旗| 天等县| 九龙坡区| 承德县| 同仁县| 昌图县| 新干县| 连城县| 瑞金市| 怀化市|