iOS面试题合集(上)

iOS面试题:常见的内存泄漏有哪些情况?如何排查和避免?

2020-08-08  本文已影响0人  iOS猿_员

面试题:常见的内存泄漏有哪些情况?如何排查和避免?

内存泄漏原理:在百度上的解释就是“程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果”。

  __weak typeof(self) weakSelf = self; self.myBlock = ^() { // 除了下面的还有 调用 self的一些属性等等 [weakSelf doSomething] };
@property(nonatomic, weak) id delegate;
(void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self.observer name:@"name" object:nil]; }
@property (nonatomic, strong) WKWebView *wkWebView;

*   (void)webviewMemoryLeak { WKWebViewConfiguration *config =[[WKWebViewConfiguration alloc] init]; 
config.userContentController = [[WKUserContentController alloc] init]; 
[config.userContentController addScriptMessageHandler:self name:@"WKWebViewHandler"]; 
_wkWebView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config]; 
_wkWebView.backgroundColor = [UIColor whiteColor]; 
[self.view addSubview:_wkWebView];
 NSURLRequest *requset = [NSURLRequest requestWithURL:[NSURL URLWithString:@"[https://www.baidu.com](https://www.baidu.com/)"]];
 [_wkWebView loadRequest:requset]; } 这样看起来没有问题,但是其实 “addScriptMessageHandler” 这个操作,导致了 wkWebView 对 self 进行了强引用,然后 “addSubview”这个操作,也让 self 对 wkWebView 进行了强引用,这就造成了循环引用。解决方法就是在合适的机会里对 “MessageHandler” 进行移除操作:

*   (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; 
[_wkWebView.configuration.userContentController removeScriptMessageHandlerForName:@"WKWebViewHandler"]; }


更多:iOS面试题 答案合集
更多:《BAT面试答案文集.PDF》,获取可加iOS技术交流圈:937194184,相互交流。

上一篇下一篇

猜你喜欢

热点阅读