A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doudou33420 中级黑马   /  2014-11-5 20:06  /  1501 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

之前查了多次关于Person * p1 = [Person alloc]init];
                                Person *p2 = p1;   内存管理的问题  一直没找到合理解释.
希望弄明白了的朋友给个回复谢谢
问题:  P1 引用计数器是 1 还是2  
如果是1  release p1对p2的影响怎么处理.  
如果是2  那在手动管理的情况下 在何时retain

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

8 个回复

倒序浏览
结贴:
大体思路是:  在ARC下 无论多少次引用  Person *p3 = p1;  Perspm *p4 = p1;    p1的引用计数器都不会增长, 因为在自动回收池中 只有当所有代码执行完才会执行回收  所以回收P1的时候其他代码都执行完了 不会造成影响,  无论是将对象当函数参数传递 还是传递到其他类中 最后都会在其p3 p4这种无初始化指针执行结束后才释放.  
所以在ARC下 怎么搞都不会"侧漏"
非ARC下 则要注意不要把 release放到 p2 p3 p4前面 (目前只是这么思考) 否则还是出野指针.
回复 使用道具 举报
为什么我感觉会增加呢?在ARC中就有俩个强指针指向这块内存,当程序行完毕后这俩个指针变量会被销毁,所以没有强指针指向它,所以内存被释放,不会造成内存泄漏。
回复 使用道具 举报
cctao 发表于 2014-11-8 00:38
为什么我感觉会增加呢?在ARC中就有俩个强指针指向这块内存,当程序行完毕后这俩个指针变量会被销毁,所以 ...

我是想不明白他在哪里retain
而且ARC下 就算不retain 也不会出错
回复 使用道具 举报
doudou33420 发表于 2014-11-8 00:46
我是想不明白他在哪里retain
而且ARC下 就算不retain 也不会出错

最简单的就是你在ARC下就摆脱retain这个魔爪,直接向是否有强指针就好了
回复 使用道具 举报
cctao 发表于 2014-11-8 10:23
最简单的就是你在ARC下就摆脱retain这个魔爪,直接向是否有强指针就好了

恩 这个问题 好郁闷
回复 使用道具 举报
cctao 中级黑马 2014-11-8 18:26:05
7#
doudou33420 发表于 2014-11-8 11:18
恩 这个问题 好郁闷

你入学流程走完了没?
回复 使用道具 举报
cctao 中级黑马 2014-11-8 18:28:30
8#
doudou33420 发表于 2014-11-8 11:18
恩 这个问题 好郁闷

你入学流程走完了没?
回复 使用道具 举报
cctao 发表于 2014-11-8 18:28
你入学流程走完了没?

恩  走完了 准备入学黑马了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马