V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
nellace
V2EX  ›  iDev

ios 开发遇到的问题

  •  
  •   nellace · 2015-04-01 16:42:00 +08:00 · 2982 次点击
    这是一个创建于 3284 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    加油吧。
    markss
        16
    markss  
       2015-04-01 22:17:18 +08:00
    @vincentxue 别谦虚,F哥水平称一声V大不为过呀。
    nellace
        17
    nellace  
    OP
       2015-04-01 22:41:55 +08:00
    @markss
    @vincentxue
    都别谦虚 真爱 hoho
    ianisme
        18
    ianisme  
       2015-04-01 22:52:07 +08:00
    为了以后的版本 转化为ARC吧
    luoyibu
        19
    luoyibu  
       2015-04-02 13:20:05 +08:00
    arrTitle 声明的是retain吗? 在mrc下,那个地方的release是必须要调用的,不然会内存泄露。
    nellace
        20
    nellace  
    OP
       2015-04-02 13:29:20 +08:00
    @luoyibu 原来如此,加了retain好了,不过为了以后维护代码代价小点,正在调整arc中,谢谢啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3337 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 00:42 · PVG 08:42 · LAX 17:42 · JFK 20:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.