<A href="http://***/" target="blank">ios培訓(xùn)</A>------我的OC語言筆記,期待與您交流!
簡單的講,構(gòu)造函數(shù)就是在創(chuàng)建一個對象的時候起到初始化的作用,對這個對象里的一些成員變量進(jìn)行初始化,析構(gòu)函數(shù)就是在對象被刪除進(jìn)行一些清理工作,也就是專門的掃尾工作,下面用代碼來進(jìn)行具體說明。
一、構(gòu)造函數(shù)
在OC中凡是已init開頭的函數(shù)我們都稱之為構(gòu)造函數(shù),在聲明構(gòu)造函數(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]; //對象生成后調(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類中聲明了,兩個初始化函數(shù),第一個帶參數(shù)第二個不帶參數(shù),在對對像進(jìn)行初始化的時候,帶參數(shù)的初始化函數(shù)顯得更為靈活,里面的初始值可以自己改動。
二、析構(gòu)函數(shù)
析構(gòu)函數(shù)聲明為“-(void)dealloc”這個函數(shù)我們不能通過對象去人為的調(diào)用它,析構(gòu)函數(shù)會在對像快要死的時候自己運(yùn)行,來看代碼。
1 @interface Person:NSObject{ 2 @private 3 int age; 4 NSString *name; 5 } 6 -(void)dealloc; //聲明析構(gòu)函數(shù),析構(gòu)函數(shù)只能有一個 7 @end 8 9 10 @implementation Person //實(shí)現(xiàn)Person 類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行處我們對其進(jìn)行了復(fù)寫,這個函數(shù)會在執(zhí)行[xiaoming release];的時候運(yùn)行,因?yàn)閞elease函數(shù)就是銷毀對象。
注意:有時候我們復(fù)寫dealloc函數(shù)的時候加上[super dealloc];會出現(xiàn)錯誤
這是因?yàn)锳RC是iOS 5推出的新功能,全稱叫 ARC(Automatic ReferenceCounting)。簡單地說,就是代碼中自動加入了retain/release,原先需要手動添加的用來處理內(nèi)存管理的引用計(jì)數(shù)的代碼可以自動地由編譯器完成了。該機(jī)制在iOS 5/ Mac OS X 10.7 開始導(dǎo)入,利用 Xcode4.2可以使用該機(jī)制。簡單地理解ARC,就是通過指定的語法,讓編譯器(LLVM3.0)在編譯代碼時,自動生成實(shí)例的引用計(jì)數(shù)管理部分代碼。有一點(diǎn),ARC并不是GC,它只是一種代碼靜態(tài)分析(StaticAnalyzer)工具。
解決辦法:雙擊中間的工程名稱,進(jìn)入build setting
將中間的Objective-C Automatic Reference Counting改為no就OK了!
新聞熱點(diǎn)
疑難解答
圖片精選