黑马程序员技术交流社区

标题: 再次发问 关于内存管理的问题 [打印本页]

作者: doudou33420    时间: 2014-11-5 20:06
标题: 再次发问 关于内存管理的问题
之前查了多次关于Person * p1 = [Person alloc]init];
                                Person *p2 = p1;   内存管理的问题  一直没找到合理解释.
希望弄明白了的朋友给个回复谢谢
问题:  P1 引用计数器是 1 还是2  
如果是1  release p1对p2的影响怎么处理.  
如果是2  那在手动管理的情况下 在何时retain
作者: doudou33420    时间: 2014-11-6 02:26
结贴:
大体思路是:  在ARC下 无论多少次引用  Person *p3 = p1;  Perspm *p4 = p1;    p1的引用计数器都不会增长, 因为在自动回收池中 只有当所有代码执行完才会执行回收  所以回收P1的时候其他代码都执行完了 不会造成影响,  无论是将对象当函数参数传递 还是传递到其他类中 最后都会在其p3 p4这种无初始化指针执行结束后才释放.  
所以在ARC下 怎么搞都不会"侧漏"
非ARC下 则要注意不要把 release放到 p2 p3 p4前面 (目前只是这么思考) 否则还是出野指针.
作者: cctao    时间: 2014-11-8 00:38
为什么我感觉会增加呢?在ARC中就有俩个强指针指向这块内存,当程序行完毕后这俩个指针变量会被销毁,所以没有强指针指向它,所以内存被释放,不会造成内存泄漏。
作者: doudou33420    时间: 2014-11-8 00:46
cctao 发表于 2014-11-8 00:38
为什么我感觉会增加呢?在ARC中就有俩个强指针指向这块内存,当程序行完毕后这俩个指针变量会被销毁,所以 ...

我是想不明白他在哪里retain
而且ARC下 就算不retain 也不会出错
作者: cctao    时间: 2014-11-8 10:23
doudou33420 发表于 2014-11-8 00:46
我是想不明白他在哪里retain
而且ARC下 就算不retain 也不会出错

最简单的就是你在ARC下就摆脱retain这个魔爪,直接向是否有强指针就好了
作者: doudou33420    时间: 2014-11-8 11:18
cctao 发表于 2014-11-8 10:23
最简单的就是你在ARC下就摆脱retain这个魔爪,直接向是否有强指针就好了

恩 这个问题 好郁闷
作者: cctao    时间: 2014-11-8 18:26
doudou33420 发表于 2014-11-8 11:18
恩 这个问题 好郁闷

你入学流程走完了没?
作者: cctao    时间: 2014-11-8 18:28
doudou33420 发表于 2014-11-8 11:18
恩 这个问题 好郁闷

你入学流程走完了没?
作者: doudou33420    时间: 2014-11-8 21:11
cctao 发表于 2014-11-8 18:28
你入学流程走完了没?

恩  走完了 准备入学黑马了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2