面试题04

1.arc 和 mrc

1.为什么要进行内存管理


因为ios应用程序,上线有内存要求,当程序运行的时在内存中超过20m就会受到内存警告,超过30m就会闪退,所以需要内存管理


内存管理分为两种机制:

arc   自动管理内存机制


仍然需要内存管理,只不过内存管理交给了编译器自己去做管理。编译器会根据对象的引用计数来判断,当一个对象没有所有者的时候,就会自动被释放掉在 arc下不使用  assign  retain  使用weak strong 



weak相当于 assign  但是weak 可以自动指向nil 防止野指针


strong相当于 retain  


 mrc  手动管理内存机制

1.使用alloc开辟内存空间

2.只有在堆区的需要管理

3.采用引用计数机制来管理

4.是引用计数增加到方法有alloc retain copy 向容器内添加元素,add方法等也会让引用计数增加

5.减少引用计数的方法有 release autorelease 还有容器移除元素的方法remove等

6.真正释放对象的方法为dealloc当一个对象的引用计数为1 的时候,再调用release  或者autorelease 的时候,系统自动触发dealloc,释放对象

7.当一个对象通过属性修饰词(copy retain retain )来获得其他内存空间所有权的时候,也要在这个对象释放的时候把这些空间的所有权一起释放

8.谁开辟的谁管理例如便利构造器 没有使用alloc开辟内存空间,所以我们不会对便利构造器创建的对象release 但是便利构造器对象仍需要释放,在便利构造器封装的方法里边自动封装了autorelease


mrc下,我们采用alloc方法会为一个对象开辟内存空间,那么这块内存空间就需要我们来管理,alloc是在堆区开辟的,其他几个分区不需要我们去管理,其中一个对象的生命周期当中,有可能这块内存空间有多个拥有者,而我们采用引用计数的形式来管理这块内存空间的所有者,其中alloc retain copy 会让引用计数增加。release 和autorelease会让引用计数减少

你可能感兴趣的:(ios面试题)