詳解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)存吃緊的時候會調(diào)用該方法(注:viewController沒有被dealloc)
內(nèi)存吃緊時,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內(nèi)存的***方式,但是OS 3.0及以后viewDidUnload方法是更好的方式
在該方法中將所有IBOutlet(無論是property還是實例變量)置為nil(系統(tǒng)release view時已經(jīng)將其release掉了)
在該方法中釋放其他與view有關(guān)的對象、其他在運行時創(chuàng)建(但非系統(tǒng)必須)的對象、以及在viewDidLoad中被創(chuàng)建的對象
release對象后,將對象置為nil(IBOutlet只需要將其置為nil,系統(tǒng)release view時已經(jīng)將其release掉了)
一般認(rèn)為viewDidUnload是viewDidLoad的鏡像,因為當(dāng)view被重新請求時,viewDidLoad還會重新被執(zhí)行
viewDidUnload中被release的對象必須是很容易被重新創(chuàng)建的對象(比如在viewDidLoad或其他方法中創(chuàng)建的對象),不要release用戶數(shù)據(jù)或其他很難被重新創(chuàng)建的對象
iOS 5的內(nèi)存管理例子
iOS5中使用了Objective-C Automatic Reference Counting 自動引用計數(shù)機制,在編程中不需要我們主動retain/release/autorelease一個對象了。
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被銷毀,對象同時也被銷毀。
- }
打印結(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í)能對你有所幫助!