码迷,mamicode.com
首页 > 移动开发 > 详细

iOS学习第四天杂记--Objective-C中的内存管理

时间:2015-08-13 11:47:31      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

  先说明下,原文为青玉伏案写的。我这只是学习而已。

  OC中的内存管理。

  OC中使用引用计数和垃圾回收来管理内存,在OC中为每个对象分配一个引用计数器,当对象刚刚被创建时其初始值为1,当有某段代码需要访问一个对象时,会将该对象的引用计数器加1(通过retain来实现);当访问一个对象结束时,会将该对象的引用计数器减1(通过release来实现);当计数器为0时,该对象占用的内存空间会被收回。在NSObject类有一个retainCount方法,调用该方法可获取当前对象的引用计数值。

  Tips:测试时如若需要用到retainCount,需要将xcode中的相关设置修改。

技术分享

将YES改为NO即可。

  

  1. 用可变的数组结合着可变的字符串来观察一下retainCount的变化。

    ?    ?      ?(1).先创建一个可变数组对象,在创建一个可变字符串对象--此时可变字符串的retainCount为1;

    ?    ?      ?(2).然后往可变数组里添加可变的字符串,观察可变字符串的retainCount的变化--往可变数组中每加一个对象,数组的retainCount +1

    ?    ?      ?(3).在可变数组中移除一个str,观察retainCount的变化--可变数组的retainCount -1。

        //用可变的数组来测试内存的访问
        NSMutableArray *array = [NSMutableArray arrayWithCapacity:3];
        //可变的字符串
        NSMutableString *str = [[NSMutableString alloc] initWithString:@"aa"];
        //这时的retainCount
        NSLog(@"新建str时的strRetain = %d",(int)[str retainCount]);
        [array addObject: str];
        [array addObject: str];
        NSLog(@"添加两个str元素后的strRetain = %d", (int)[str retainCount]);
        
        [array removeObjectAtIndex: 0];
        NSLog(@"移除一个元素后strRetain = %d", (int)[str retainCount]);

技术分享

?  2.NSString的retainCount的变化

    ?    ?    ?用NSString声明的字符串变量的retainCount变化由你初始化字符串时的方式决定

    ?    ?    ?1. 用NSString *str = @"ludashi";定义变量

    ?    ?    ?    ?用上面的方法定义的字符串是常量字符串,他的retianCount为-1或不定,不会随着retian或者release变化而变化

   

Objective-C中得ARC(Automatic Reference Counting)

    ?    1.?ARC中应注意的问题:

    ?    ?    ?(1). 不能显式调用dealloc语句, 或者实现或调用retain, release, retianCount 和 autorelease等方法。

    ?    ?    ?(2).不能调用@selector (retain) ,@selector (release)等;

    ?    ?    ?(3).不能使用NSAutoreleasePool对象, 用@autoreleasepool块来代替;

    ?    ?    ?(4).不能用开头new的名称来定义一个属性,除非你定义一个别的getter名称。

 

    ?    ?2.ARC特性

    ?    ?    ?ARC增加了新的属性定义关键字,strong来代替retain,表示强引用。用weak来代替assign表示弱引用。

iOS学习第四天杂记--Objective-C中的内存管理

标签:

原文地址:http://www.cnblogs.com/wmx-rj/p/4726670.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!