美文网首页
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