美文网首页
2018-03-26 iOS 开发随笔

2018-03-26 iOS 开发随笔

作者: 杨柳小易 | 来源:发表于2018-03-26 19:55 被阅读9次

    预防循环引用Delegate

    代码重构遇到了一个问题,内存泄漏,就是退出某个viewController之后,viewController没有被释放,

    dealloc里面有各种释放操作,代码也有100+了。

    最后定位问题在如下代码:

    if (_action) {
            _action.delegate = nil;
            _action = nil;
        }
    

    这里delegate为什么要释放?点进去看了之后才发现如下的声明

    @property(strong,nonatomic) id<UserActionDelegate> delegate;
    

    ok,问题是很好修复啦啦,但是定位问题和预防问题还是要有的,如何做呢,

    使用XCode 的 Code Snippet Library
    将在Xcode中编写好的代码选中,按住左键将其拖入Code Snippet Library内,按照提示完成就OK啦啦。

    所以可以把delegate做成一个类似的的东东,还有一个就是肉眼观察啦啦哈哈

    或者直接使用成员变量来做比如

    @implementation LiveHouseUserAction
    {
        __weak<PTVNetworkDelegate>netWorkDelegate;
    }
    
    

    图片模糊问题

    今天打包机上打包出来的东东,在测试那边跑,很多图标都花了。

    问了一下相关同学,打包机上的XCode已经升级到了9.2.但是测试那边的机器版本是 8.2、上网搜了一下,苹果自己的问题,要么建聪从iOS9开始,要么降级打包机,或者把图片放在bundle中也可以解决,详见

    https://blog.yuhanle.com/2017/12/09/xocde9-2-and-iOS-8-1-image-unnormal/

    开发偷懒技巧

    给NSObject 添加响应连。之前有给项目中引入了响应连传递事件,如下:

    @implementation UIResponder (Router)
    
    - (void)routerEventWithName:(NSString *)eventName userInfo:(NSDictionary *)userInfo
    {
        [[self nextResponder] routerEventWithName:eventName userInfo:userInfo];
    }
    
    @end
    
    

    具体可以详见此篇文章 https://casatwy.com/responder_chain_communication.html 一种基于ResponderChain的对象交互方式

    今天阅读代码发现了如下模块:


    屏幕快照 2018-03-26 下午7.47.13.png

    使用viewController的view初始化lotterymanager.然后lotteryNetManager(网络模块)请求网络,回传给 lotterymanager lotterymanager再根据需求调用viewManager或者viewController的方法。这里避免不了使用delegate 或者 block or 通知。

    中午添加了一个有魔力的分类。如下:

    @interface NSObject(chain)
    @property (nonatomic, weak) id obj;
    @end
    
    

    然后给 NSObject实现 routerEventWithName方法。打通了一条响应连……

    想了想,不能广泛使用,就删了……

    相关文章

      网友评论

          本文标题:2018-03-26 iOS 开发随笔

          本文链接:https://www.haomeiwen.com/subject/kofdcftx.html