码迷,mamicode.com
首页 > 其他好文 > 详细

Object-C内存管理-对象引用计数的特例

时间:2014-11-07 18:50:44      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:style   java   sp   strong   on   问题   log   代码   bs   

看到OC中内存管理这块,其中的引用计数部分,由部分10.5上的EBOOK示例已经在10.9上不能运行正确了,比如下面的代码:

 NSString * str1 = @"string 1";

    NSString * str2 = @"string 2";

    NSMutableString * mstr3 = [NSMutableString stringWithString: @"string 3"];

    NSNumber * int1 = [NSNumber numberWithInteger: 1800000];

    NSNumber * long1 = [NSNumber numberWithLong: 1800000];

    NSNumber * double1 = [NSNumber numberWithDouble: 300.0];

    

    NSLog(@"retain count: str1=%lx, str2=%lx, str3=%lx, int1=%lx, long1=%lx, double1=%lx",

          [str1 retainCount],

          [str2 retainCount],

          [mstr3 retainCount],

          [int1 retainCount],

          [long1 retainCount],

          [double1 retainCount]);

运行结果是:

014-11-07 17:05:22.128 Demo17[9620:303] retain count: str1=ffffffffffffffff, str2=ffffffffffffffff, str3=1, int1=7fffffffffffffff, long1=7fffffffffffffff, double1=1

Program ended with exit code: 0

EBOOK上讲的是常量字符串对象不参与计数,这个是正确的,但是实际运行结果发现,整形的NSNumber对象也好像不参与计数,浮点的NSNumber对象参与计数,即使整形数字很大也不参与计数。Java里面曾经由实现是对小额数字封装对象做缓存,所有小额数字封装对象不参与计数。但是OC里面看起来不是这样的,因为数字已经足够大,不能缓存这么多的整形对象吧?

OC的具体是什么后面再继续研究。

目前总结出的结论是:

1. 常量字符串不参与计数。

2. 常量整形NSNumber对象不参与计数。

3. 其余的对象参与计数。

 

打完收工,有问题再记录~

Object-C内存管理-对象引用计数的特例

标签:style   java   sp   strong   on   问题   log   代码   bs   

原文地址:http://www.cnblogs.com/dericxu/p/4081781.html

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