解決IOS編程中內(nèi)存分配與釋放問(wèn)題
解決IOS編程中內(nèi)存分配與釋放問(wèn)題是本文要介紹的內(nèi)容,主要是來(lái)學(xué)習(xí)IOS應(yīng)用中內(nèi)存是如何來(lái)分配和釋放的問(wèn)題,不多說(shuō),來(lái)看本文詳解。
在ios編程中是離不開內(nèi)存操作的,剛接觸ios編程時(shí)總是因?yàn)檫@樣那樣的內(nèi)存問(wèn)題而導(dǎo)致程序crash掉。其實(shí)ios編程中內(nèi)存的釋放還是比較簡(jiǎn)單的,只需要release或autorelease你自己retain、new、alloc、copy和mutableCopy的對(duì)象即可。一個(gè)原則就是:你分配了存,你就負(fù)責(zé)釋放。
另外要注意的就是很多方法會(huì)自動(dòng)retain被添加的對(duì)象,比如:
- NSString *test = [[NSString alloc] initWithFormat: @"%d", 111];
- NSLog(@"%d", [test retainCount]);//此時(shí)test的retain為1
- NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:test, nil];
- NSLog(@"%d", [test retainCount]);//此時(shí)test的retain為2,因?yàn)閍rray中添加了test對(duì)象,所以test會(huì)被retain
- [array addObject:test];
- NSLog(@"%d", [test retainCount]);//此時(shí)test的retain為3,因?yàn)閍rray中又添加了test對(duì)象,所以test會(huì)被retain
- [array release];
- NSLog(@"%d", [test retainCount]);//此時(shí)test的retain為1,array被釋放,它會(huì)自動(dòng)釋放自己內(nèi)部的對(duì)象,所以test的retain count又變回1
所以在調(diào)用類似addObject:test這樣的方法后,如果你不在使用test對(duì)象了,請(qǐng)一定釋放它,而不用擔(dān)心“如果我釋放了test,那么array中的test是不是會(huì)沒(méi)有了???”這樣的問(wèn)題,如果你不釋放它反而會(huì)導(dǎo)致內(nèi)存的泄漏。
retainCount類似java中的引用計(jì)數(shù),當(dāng)retainCount為0時(shí),就會(huì)調(diào)用該對(duì)象的dealloc方法從而釋放該對(duì)象。
小結(jié):解決IOS編程中內(nèi)存分配與釋放問(wèn)題的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!