240 发简信
IP属地:河南
  • 楼主:【使用block来解决】这一节存在两处错误:
    1、NSTimer类对象不存在保留环,NSTimer类对象不存引用timer实例对象的场景;
    2、在使用NSTimer分类的对象的dealloc方法中,需要执行timer的invalidate方法,不然timer会存在内存泄漏问题。虽然对象中的timer属性会置位nil,但是内存中的timer仍被runloop强引用着,没被销毁(这个可以通过在block的首行增加一行控制台日志打印来验证)。
    其实,该分类实现方案跟NSProxy方案类似,都是将timer的target对象转移到其他对象,避免真正使用timer的对象被timer强引用(其实源头是被runloop强引用着)。这样,可以在真正使用timer对象的dealloc方法中调用timer的invalidate方法,来解除runloop对timer的强引用,进而释放timer对象。

    iOS之NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几种解决NSTimer的几种循环引用。 原因 当你在ViewC...

  • “在ARC下,编译器会检查方法名是否以alloc/new/copy/mutableCopy开头,如果不是,则自动将返回的对象注册到autorelease pool中。“这句话,在新的Xcode上验证不成立,也就是XSQObject这个对象的例子,打印结果两个都是null

    ARC下的autorelease

    发现我从接触iOS开发到现在,几乎都没有使用过autorelease这个词。在ARC内存管理方式下,就像不能发送release和retain消息一样,程序员也不能对某个对象发...

  • 120
    UITableView tableHeaderView 使用Masonry自动计算高度

    方法1: 注:此方法在Xcode控制台会出现布局警告问题! 方法2: 注:此方法可解决“方法1”出现的布局警告问题,但一定记住要给headerView加上top布局属性,不然...