1.Objective-C如何对内存管理的,说说你的看法和解决方法?
每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁通过retain可以让对象的计数器+1、release可以让对象的计数器-1还可以通过autorelease pool管理内存如果用ARC,编译器会自动生成管理内存的代码
2.内存管理的几条原则时什么?按照默认法则.哪些方法生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者autorelease
只要调用了retain,都必须在最后调用一次release或者autorelease
@property如果用了copy或者retian,就需要对不再使用的属性做一次release操作
如果用了ARC,另外讨论
3.What is Singleton? (单例是什么)
单例:保证程序运行过程中,永远只有一个对象实例
目的是:全局共享一份资源、节省不必要的内存开销
4。对象是什么时候被释放的?
每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁
5.什么情况下会发生内存泄漏和内存溢出?
当程序在申请内存后,无法释放已申请的内存空间(例如一个对象或者变量使用完成后没有释放,这个对象一直占用着内存),一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存泄露会最终会导致内存溢出!
当程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个int,但给它存了long才能存下的数,那就是内存溢出。
网友评论