http://ww1.sinaimg.cn/bmiddle/686c6057jw1eqq5lsnu3gj20gn06bjta.jpg
arrTitle数组是在.m中的全局变量,在viewDidLoad负值3个objects,然后下面就奇怪了
在viewWillAppear还可以看到是3个objects,
但是在viewDidAppear的时候arrTitle就变成0个objects。。。实在想不通。。。
1
nellace OP |
2
vincentxue 2015-04-01 16:47:19 +08:00
很有可能是被重新初始化了,或者被移除了(如果是可变数组的话)。信息太少,很难判断。
|
3
simman 2015-04-01 16:50:35 +08:00
同意楼上,并且重写 viewWillAppear 等,记得要 super 哦。
|
4
nellace OP @vincentxue 因为 我问题排查 排查到最后,就锁定在了这两段之间了,中间也没有重新初始化,很是奇怪,xcode版本6.2
|
5
vincentxue 2015-04-01 17:07:28 +08:00 1
如果代码量不多的话建议贴个完整的代码看看,目前的信息只能靠猜。
能不用全局变量就别用全局变量,必须用的话尽量用属性代替全局变量,虽然有一丁点的额外的消耗,但以目前的设备性能来说完全可以忽略不及。 用属性也带来很多好处,其中之一就是如果碰到你这种问题,直接重写 setter 打个断点一步就能定位到错误点。 |
6
expkzb 2015-04-01 17:08:16 +08:00
weak 还是 strong
|
7
padthai 2015-04-01 17:14:57 +08:00
得把。m全贴这才能分析
|
8
pH 2015-04-01 17:40:38 +08:00 1
类似这个will did之类的的方法,一般都是要加上super的同名方法
可以参考截图中viewDidAppear方法的第一行代码 |
9
eternityz 2015-04-01 17:42:17 +08:00
把 &arrTitle 也打出来确认一下是不是同一个对象。
|
10
nellace OP |
12
vincentxue 2015-04-01 19:05:32 +08:00
现在除了某些大公司(例如腾讯)的老项目,基本上都是 ARC 了,而且很多大公司的老项目也已经迁移到 ARC 了,ARC 现在已经是标准了,ARC 普及有2-3年了,13年之前很多开源项目还是 MRC 的。
建议先掌握 MRC 之后再使用 ARC,并且强烈推荐使用 ARC,你基本上很难再遇到内存相关的问题,如果你用的 ARC,那你就不会出现今天这个问题了。 |
13
markss 2015-04-01 20:39:37 +08:00 1
@vincentxue
@nellace 同意楼上,从10楼那段代码看,即使是MRC,那段代码也没有问题,alloc 引用计数+1, push 引用计数+1 release -1 ,不会造成tGsystemSet被释放,只有当pop回来的时候才会被释放。我觉得问题可能出在你数组初始化上面,你如果用的类方法初始化,那么就会造成数组提前进入自动释放池,建议用属性,或者类方法初始化时候retain一次。 |
14
nellace OP @vincentxue 先对v大再次感谢,项目以后慢慢修改过度过去吧
@markss先谢谢你哦, 问题确实是在这里,我自己写了一个最简单的demo,把项目arc选项选no,然后在self.navagation push新页面前release掉,和上面代码结构差不多,然后确实出现这个问题,今天调试了很久才找到问题点,具体问题我还是不太清楚,因为接触mrc很少,所以害的明天多研究下 |
15
vincentxue 2015-04-01 22:08:58 +08:00
|
16
markss 2015-04-01 22:17:18 +08:00
@vincentxue 别谦虚,F哥水平称一声V大不为过呀。
|
17
nellace OP |
18
ianisme 2015-04-01 22:52:07 +08:00
为了以后的版本 转化为ARC吧
|
19
luoyibu 2015-04-02 13:20:05 +08:00
arrTitle 声明的是retain吗? 在mrc下,那个地方的release是必须要调用的,不然会内存泄露。
|