iOS工作中遇到的问题(2017/2/9更新)

这篇文章会长期定期更新,以此记录下自己在iOS开发中遇到的问题。也欢迎大家留言补充。


1.今天研究贝塞尔曲线时候,发现了一个写法:makeObjectsPerformSelector

[self.displayView.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];其中makeObjectsPerformSelector是不曾见过,查阅资料,发现是NSArray和NSSet的方法。类似NSNotification,和for循环实现差不多,效率比for循环高,并发得执行一件事。它还有一个兄弟方法:- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;经测试,argument必须为非基本类型,这点比较特殊。

2.内存分配

作用:

UIImage创建有两种方式,imageNamed和imageWithContentOfFile。

imageNamed使用后图片不会立马释放内存,对于图片大量反复使用,可以用此方法。

imageWithContentOfFile,使用后会清除内存,大图片不常用可以调用此法。

3.重度使用NSURLProtocol的陷阱

项目一直是监控url请求,并且拦截一些特定请求,做一些中转重定向操作。前期有段时间切换了AFNetworking3.0,改用NSURLSession了(苹果推荐使用替代connection),但是拦截器我依然[NSURLProtocol registerClass:[SUURLProtocol class]];这样处理,发现监听不到。经过调试发现,需要给NSURLSessionConfiguration设置下protocal,类依然可以共用。

注意点:系统自身NSURLSessionConfiguration的protocolClasses数组有4个值,我们添加自定义的拦截器后需要插入在头部。和NSConnection的拦截器不同(这些是插入队尾)。当然你直接设置你自己的也没问题,为了侵入性最小,我们还是选择插入队头。这样你的app所有请求都会被你接管。

NSURLProtocol的具体用法,我后续会单独发偏文章。

你可能感兴趣的:(iOS工作中遇到的问题(2017/2/9更新))