【面试题】基础篇02

1.事件传递流程

1.用户触摸屏幕,系统将事件加入到UIApplication管理的一个任务队列中
2.UIApplication将处于任务队列最前端的事件向下分发到UIWindow
3.UIWIndow将事件向下分发到UIView
4.UIView先看自己是否能处理事件,如果他的触摸范围内,就继续寻找subView
5.遍历子控件,看某个subView能处理事件
6.如果都没有找到,那就是UIView来处理
7.如果UIView也处理不了,就不做任何处理

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
这个方法会找到最合适的view


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
这个方法是最后响应事件的方法

2.内存泄露

指申请的内存空间使用完毕之后未回收。

3.内存溢出

指程序在申请内存时,没有足够的内存空间供其使用。

4.常见的内存泄露情况

1.NSTimer,target:self,导致VC的引用计数+1,self强引用timer,timer强引用self,造成循环引用。

解决办法:ios10+
使用ios10+ API去开启timer,然后在持有timer的VC中的-(void)dealloc中调用-(void)invidate方法

2.vc中代理使用strong修饰,vc强引用view,view强引用delegate,delegate内部强引用self。造成内存泄露。解决办法:delegate使用weak修饰

3.block中使用self,当block被self持有,block内部在持有self,就会造成循环引用。解决办法:使用__weak 修饰

4.UIWebView的使用,会导致内存暴增。解决办法:使用WKWebView替代

5.加载大图片尽量不要使用[UIImage imageNamed:@""],这个方法会长时间占用内存,使用imageWithContentsOfFile方法

6.AFN的问题,AFHTTPSessionManager是一个对象,不是一个单例。解决办法:封装网路请求时将AFHTTPSessionManager封装成一个单例,进行全局管理。防止内存泄露。

5.内存泄露检测

Xcode自带:cmd+shift+b
第三方:MLeaksFinder

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值