Object-C内存管理-对象引用计数的特例
看到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内存管理-对象引用计数的特例的更多相关文章
- 【python测试开发栈】python内存管理机制(一)—引用计数
什么是内存 在开始进入正题之前,我们先来回忆下,计算机基础原理的知识,为什么需要内存.我们都知道计算机的CPU相当于人类的大脑,其运算速度非常的快,而我们平时写的数据,比如:文档.代码等都是存储在磁盘 ...
- Objective C 内存管理[转]
1 配对原则 alloc – release new – release retain - release copy – release 2 new和alloc-init的区别 (1)区别只在于a ...
- iOS内存管理retain,assign,copy,strong,weak
转自:http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html iOS的对象都继承于NSObject, 该对象有一个方法:retain ...
- iOS-多线程-内存管理
iOS与OSX 多线程和内存管理 总结 一. 自动引用计数 1.自动引用计数(ARC)就是指内存管理中对引用采用自动计数的技术. 满足以下条件即可使用这种功能: Xcode ...
- Objective-C 高级编程:iOS与OS X多线程和内存管理
<Objective-C 高级编程:iOS与OS X多线程和内存管理> 基本信息 原书名: Pro Multithreading and Memory Management for iOS ...
- python9--内存管理 引用计数 标记清除 分代回收
复习 文件处理 1.操作文件的三步骤 -- 打开文件:硬盘的空间被操作系统持有 | 文件对象被应用程序持续 -- 操作文件:读写操作 -- 释放文件:释放操作系统对硬盘空间的持有 2.基础的读写 ...
- day09内存管理
复习 ''' 文件处理 1.操作文件的三步骤 -- 打开文件:硬盘的空间被操作系统持有 | 文件对象被应用程序持续 -- 操作文件:读写操作 -- 释放文件:释放操作系统对硬盘空间的持有 2.基础的读 ...
- day-09内存管理
内存管理 引用计数:垃圾回收机制的依据 # 1.变量的值被引用,该值的引用计数 +1# 2.变量的值被解绑,该值的引用计数 -1# 3.引用计数为0时就会被垃圾回收机制回收 引用计数会出现循环引用问 ...
- day_9内存管理
复习 '''文件处理1.操作文件的三步骤 -- 打开文件:硬盘的空间被操作系统持有 | 文件对象被应用程序持续 -- 操作文件:读写操作 -- 释放文件:释放操作系统对硬盘空间的持有 2.基础的读写 ...
随机推荐
- Ruby-递归和尾递归
递归和迭代的区别 递归: 1)递归就是在过程或函数里面调用自身; 2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口. 迭代: 利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话 ...
- JS获取指定的cookie值
cookie Name为TEST_COOKIE:用如下方法可以获取cookie值: document.cookie.replace(/(?:(?:^|.*;\s*)TEST_COOKIE\s*\=\s ...
- quartz学习
quartz是一个作业调度框架,用于指定工作(作业)在指定时间执行——定时工作. quartz的核心接口有: Scheduler接口:Scheduler是job的执行对象,用于工作的执行. Job接口 ...
- windows与linux之间文件的传输方式总结(转)
当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...
- position与z-index的关系
.simulationgame .gameranking .rankinginfo{ width:140px; margin:0 auto; font-family:Arial, Microsoft ...
- grep使用多个查询条件--或
[root@mail ~]# grep 'usrquota\|grpquota' /etc/fstabLABEL=/1 / e ...
- HR开发 获取信息类型数据
1.PNP逻辑数据库. LOOP获取信息类型数据. TABLES: PERNR . , . START-OF-SELECTION. GET PERNR . LOOP AT P0000 WHERE .. ...
- Android中脱离WebView使用WebSocket实现群聊和推送功能
WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...
- HTTP Client工具类
HTTP Client工具类: import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.ht ...
- JavaScript中关于时间的知识点
1.计算时间差,天数,小时数,余数 var begintime_ms = Date.parse(new Date(begintime.replace(/-/g, "/"))); / ...