詳解IOS開發(fā)學(xué)習(xí)筆記案例分析
IOS開發(fā)學(xué)習(xí)筆記案例分析是本文要介紹的內(nèi)容,主要講解ViewDidUnload使用方法和iOS 5的內(nèi)存管理例子的內(nèi)容,來看詳細(xì)內(nèi)容。
ViewDidUnload使用方法
當(dāng)系統(tǒng)內(nèi)存吃緊的時(shí)候會(huì)調(diào)用該方法(注:viewController沒有被dealloc)
內(nèi)存吃緊時(shí),在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內(nèi)存的***方式,但是OS 3.0及以后viewDidUnload方法是更好的方式
在該方法中將所有IBOutlet(無論是property還是實(shí)例變量)置為nil(系統(tǒng)release view時(shí)已經(jīng)將其release掉了)
在該方法中釋放其他與view有關(guān)的對(duì)象、其他在運(yùn)行時(shí)創(chuàng)建(但非系統(tǒng)必須)的對(duì)象、以及在viewDidLoad中被創(chuàng)建的對(duì)象
release對(duì)象后,將對(duì)象置為nil(IBOutlet只需要將其置為nil,系統(tǒng)release view時(shí)已經(jīng)將其release掉了)
一般認(rèn)為viewDidUnload是viewDidLoad的鏡像,因?yàn)楫?dāng)view被重新請(qǐng)求時(shí),viewDidLoad還會(huì)重新被執(zhí)行
viewDidUnload中被release的對(duì)象必須是很容易被重新創(chuàng)建的對(duì)象(比如在viewDidLoad或其他方法中創(chuàng)建的對(duì)象),不要release用戶數(shù)據(jù)或其他很難被重新創(chuàng)建的對(duì)象
iOS 5的內(nèi)存管理例子
iOS5中使用了Objective-C Automatic Reference Counting 自動(dòng)引用計(jì)數(shù)機(jī)制,在編程中不需要我們主動(dòng)retain/release/autorelease一個(gè)對(duì)象了。
MyClass的dealloc中打印了
- NSLog(@"%s %d", __FUNCTION__, __LINE__);
在AppDelegateDidFinishLaunching中做如下處理:
- NSLog(@"before 1");
- {
- static MyClass *m = nil;
- m = [[MyClass alloc] init]; // m沒有被銷毀,所指向?qū)ο笠矝]有被銷毀
- }
- NSLog(@"after 1");
- NSLog(@"before 2");
- {
- MyClass *m = nil;
- m = [[MyClass alloc] init]; // m被銷毀,對(duì)象同時(shí)也被銷毀。
- }
打印結(jié)果:
- 2011-07-10 00:59:44.556 aaaaa[4965:207] before
- 2011-07-10 00:59:44.558 aaaaa[4965:207] after
- 2011-07-10 00:59:44.558 aaaaa[4965:207] before
- 2011-07-10 00:59:44.558 aaaaa[4965:207] -[MyClass dealloc] 25
- 2011-07-10 00:59:44.559 aaaaa[4965:207] after
小結(jié):IOS開發(fā)學(xué)習(xí)筆記案例分析的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!