2018-03-26 iOS 开发随笔
预防循环引用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的对象交互方式
今天阅读代码发现了如下模块:

使用viewController的view初始化lotterymanager.然后lotteryNetManager(网络模块)请求网络,回传给 lotterymanager lotterymanager再根据需求调用viewManager或者viewController的方法。这里避免不了使用delegate 或者 block or 通知。
中午添加了一个有魔力的分类。如下:
@interface NSObject(chain)
@property (nonatomic, weak) id obj;
@end
然后给 NSObject实现 routerEventWithName
方法。打通了一条响应连……
想了想,不能广泛使用,就删了……