浅谈内存管理

来源:互联网 发布:php round 编辑:程序博客网 时间:2024/05/29 18:26

   

        内存管理的实质就是管理内存, 我们通常所说的管理内存就是对堆区的内存进行管理.


       内存管理机制:  内存管理采用 "引用计数机制 (retain count)''  当一个对象被创建时(alloc)  引用计数会+1; 每增加一个所有者(retain)对象的引用计数+1失去一个所有者(release)对象的引用计数-1; 当对象的引用计数为0, 会调用dealloc方法,销毁对象. 其中, alloc, retain, copy 会使对象的引用计数立即+1; release 会使对象的引用计数立即-1;

autorelease 会在未来的某一时刻对对象进行释放;


      内存管理原则:  引用计数的增加和引用计数的减少应当保持平衡  for example : 出现一个alloc , 就对应一个release;出现一个retain, 就对应一个release;

      

   // alloc 在分配内存空间的同时,让它所创建的对象的引用计数为1

    // alloc返回一个内存引用计数为1的对象

   Student *stu = [[Studentalloc]init];

    // 打印引用计数

    NSLog(@"%ld", [sturetainCount]);

    //让当前所调用的对象的引用计数+1

    [sturetain];

    NSLog(@"retain == %ld", [sturetainCount]);

    //在当前的计数的基础上-1

    [sturelease];

    NSLog(@"retain3 == %ld", [sturetainCount]);

    [stu release]; 

    NSLog(@"retain4 == %ld", [sturetainCount]); 

     // 当前的引用计数为0,会自动调用dealloc方法销毁对象

    [sturetain];

   //野指针对象释放掉以后不能再对此对象进行任何操作,当前指针已经变为野指针一旦操作会crash


   以下几点需要注意:
   1.OC中提供了垃圾回收机制,但是IOS并不支持垃圾回收机制,iOS5以后有了ARC, 它是系统的自      带的一种内存管理方式, 在系统内部运行,不是垃圾回收机制! 
   2.NSString在Objective-C中是一种非常特殊的对象,它是保存在栈区里,其引用系数不受引           用计数规则的控制.NSString对象不管是alloc、retain还是release,其引用计数都是-1.
   3.当向容器类型的对象添加对象时,起引用计数也会+1; 例如: 数组, 字典等

0 0