IOS开发学习笔记案例分析是本文要介绍的内容,主要讲解ViewDidUnload使用方法和iOS 5的内存管理例子的内容,来看详细内容。
ViewDidUnload使用方法
当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)
内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的***方式,但是OS 3.0及以后viewDidUnload方法是更好的方式
在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)
在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、以及在viewDidLoad中被创建的对象
release对象后,将对象置为nil(IBOutlet只需要将其置为nil,系统release view时已经将其release掉了)
一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行
viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新创建的对象
iOS 5的内存管理例子
iOS5中使用了Objective-C Automatic Reference Counting 自动引用计数机制,在编程中不需要我们主动retain/release/autorelease一个对象了。
MyClass的dealloc中打印了
- NSLog(@"%s %d", __FUNCTION__, __LINE__);
在AppDelegateDidFinishLaunching中做如下处理:
- NSLog(@"before 1");
- {
- static MyClass *m = nil;
- m = [[MyClass alloc] init]; // m没有被销毁,所指向对象也没有被销毁
- }
- NSLog(@"after 1");
- NSLog(@"before 2");
- {
- MyClass *m = nil;
- m = [[MyClass alloc] init]; // m被销毁,对象同时也被销毁。
- }
打印结果:
- 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
小结:IOS开发学习笔记案例分析的内容介绍完了,希望通过本文的学习能对你有所帮助!