—ios面试经之内存管理

1.内存管理

  创建对象的三个过程:分配内存空间,存储对象、初始化成员变量、返回对象的指针地址

  1.1

    对象在完成创建的同时,内部会自动的弹出一个引用计数器(retain count),该计算器是系统用来判断是否回收该对象的唯一依据,当我们的retain count = 0时,系统会毫不犹豫的回收该对象。

  1.2 

    [对象 release] retain count - 1;

    [对象 retain] retain count + 1;

  1.3

    dealloc 函数 ,当一个对象要被销毁时的时候,系统就会自动调用dealloc 函数,通知对象被销毁,在MRC中释放对象时,当重写父类NSObject中的dealloc方法时,要注意一定要重写父类的dealloc方法

  - (void) dealloc {

  [super dealloc]; //就是这个利用super 

  NSlog(@"某某对象已经被系统销毁");

  1.4 

    内存管理原则(同时也叫配对原则:只要出现了 new alloc retain),就必须出现一个相对应的release或 autorelease 

  1.5 

    手动内存管理研究问题的方法(一般就只会出现以下两种问题)

    1. 野指针操作  2.内存泄漏

    例:在main主函数中

     person * p = [person alloc ] init];

     p.age = 20;

     [p release];

     p.age = 30;//这里就会出现野指针操作问题

     解决办法:在这之前加上 p = nil ,然后及时p .age = 30;就不会报出不能访问不难访问的内存空间

    // 只要对象的retaincount 不等于 0 就会一直存在内存当中

    // 内存泄漏指的就是,不在被使用的对象,一直在内存当中没有被销毁

    // 野指针操作,当一个对象retaincount已经为0了,调用retain方法,是不会使得对象再次返回内存当中的

 

posted @ 2015-12-16 10:05  爆发的小子弹  阅读(119)  评论(0编辑  收藏  举报