ios 开发遇到的问题

2015-04-01 16:42:00 +08:00
 nellace

http://ww1.sinaimg.cn/bmiddle/686c6057jw1eqq5lsnu3gj20gn06bjta.jpg

arrTitle数组是在.m中的全局变量,在viewDidLoad负值3个objects,然后下面就奇怪了
在viewWillAppear还可以看到是3个objects,
但是在viewDidAppear的时候arrTitle就变成0个objects。。。实在想不通。。。

3191 次点击
所在节点    iDev
20 条回复
nellace
2015-04-01 16:42:20 +08:00
vincentxue
2015-04-01 16:47:19 +08:00
很有可能是被重新初始化了,或者被移除了(如果是可变数组的话)。信息太少,很难判断。
simman
2015-04-01 16:50:35 +08:00
同意楼上,并且重写 viewWillAppear 等,记得要 super 哦。
nellace
2015-04-01 16:52:57 +08:00
@vincentxue 因为 我问题排查 排查到最后,就锁定在了这两段之间了,中间也没有重新初始化,很是奇怪,xcode版本6.2
vincentxue
2015-04-01 17:07:28 +08:00
如果代码量不多的话建议贴个完整的代码看看,目前的信息只能靠猜。

能不用全局变量就别用全局变量,必须用的话尽量用属性代替全局变量,虽然有一丁点的额外的消耗,但以目前的设备性能来说完全可以忽略不及。

用属性也带来很多好处,其中之一就是如果碰到你这种问题,直接重写 setter 打个断点一步就能定位到错误点。
expkzb
2015-04-01 17:08:16 +08:00
weak 还是 strong
padthai
2015-04-01 17:14:57 +08:00
得把。m全贴这才能分析
pH
2015-04-01 17:40:38 +08:00
类似这个will did之类的的方法,一般都是要加上super的同名方法
可以参考截图中viewDidAppear方法的第一行代码
eternityz
2015-04-01 17:42:17 +08:00
把 &arrTitle 也打出来确认一下是不是同一个对象。
nellace
2015-04-01 18:25:59 +08:00
@simman
@vincentxue
@expkzb
@padthai
@pH
@eternityz
首先感谢各位,问题我找到了,项目不支持arc,navigation页面push过来的时候release掉了

我写了一个demo,关掉arc,push之前release也会出现这样的问题,具体问题我还没弄清楚,问题点应该就在这了
还有就是,公司这样的项目有必要以后我调整成arc嘛?
pH
2015-04-01 18:39:05 +08:00
@nellace 当然要用ARC了一般。
vincentxue
2015-04-01 19:05:32 +08:00
现在除了某些大公司(例如腾讯)的老项目,基本上都是 ARC 了,而且很多大公司的老项目也已经迁移到 ARC 了,ARC 现在已经是标准了,ARC 普及有2-3年了,13年之前很多开源项目还是 MRC 的。

建议先掌握 MRC 之后再使用 ARC,并且强烈推荐使用 ARC,你基本上很难再遇到内存相关的问题,如果你用的 ARC,那你就不会出现今天这个问题了。
markss
2015-04-01 20:39:37 +08:00
@vincentxue
@nellace 同意楼上,从10楼那段代码看,即使是MRC,那段代码也没有问题,alloc 引用计数+1, push 引用计数+1 release -1 ,不会造成tGsystemSet被释放,只有当pop回来的时候才会被释放。我觉得问题可能出在你数组初始化上面,你如果用的类方法初始化,那么就会造成数组提前进入自动释放池,建议用属性,或者类方法初始化时候retain一次。
nellace
2015-04-01 21:15:18 +08:00
@vincentxue 先对v大再次感谢,项目以后慢慢修改过度过去吧

@markss先谢谢你哦, 问题确实是在这里,我自己写了一个最简单的demo,把项目arc选项选no,然后在self.navagation push新页面前release掉,和上面代码结构差不多,然后确实出现这个问题,今天调试了很久才找到问题点,具体问题我还是不太清楚,因为接触mrc很少,所以害的明天多研究下
vincentxue
2015-04-01 22:08:58 +08:00
@nellace 太过奖了,v大这个称呼我承受不起的,弄不好我年龄可能比你还小,而且个人水平真的配不上大这个称呼。
@markss 的水平远高过我,之所以这么说是因为我们现实中是认识的。

加油吧。
markss
2015-04-01 22:17:18 +08:00
@vincentxue 别谦虚,F哥水平称一声V大不为过呀。
nellace
2015-04-01 22:41:55 +08:00
@markss
@vincentxue
都别谦虚 真爱 hoho
ianisme
2015-04-01 22:52:07 +08:00
为了以后的版本 转化为ARC吧
luoyibu
2015-04-02 13:20:05 +08:00
arrTitle 声明的是retain吗? 在mrc下,那个地方的release是必须要调用的,不然会内存泄露。
nellace
2015-04-02 13:29:20 +08:00
@luoyibu 原来如此,加了retain好了,不过为了以后维护代码代价小点,正在调整arc中,谢谢啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/180894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX