iOS 12学习系列:针对Xcode的警告忽略消除处理
Posted Zev_Fung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 12学习系列:针对Xcode的警告忽略消除处理相关的知识,希望对你有一定的参考价值。
一、问题描述
html代码如下
1 <html> 2 <head> 3 <meta charset="utf-8"/> 4 <title>我的网页</title> 5 <script type="text/javascript"> 6 function JS2OC() 7 { 8 window.location.href="fzw://send"; 9 } 10 </script> 11 </head> 12 <body> 13 <input value="js调用oc" type="button" onclick=\'JS2OC();\'></input> 14 </body> 15 </html>
显示效果如下
oc代码如下
1 /** 2 * 跳转判断 3 */ 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 5 { 6 NSString *urlString = request.URL.absoluteString; 7 NSLog(@"urlString:%@",urlString); 8 NSString *preString = @"fzw://"; 9 if([urlString hasPrefix:preString]) 10 { 11 NSString *methodString = [urlString substringFromIndex:preString.length]; 12 NSLog(@"methodString:%@",methodString); 13 [self performSelector:NSSelectorFromString(methodString)]; 14 return NO; 15 } 16 return YES; 17 } 18 19 -(void)send 20 { 21 NSLog(@"%s",__func__); 22 }
点击demo.html的按钮“js调用oc”,网页跳转到fzw://send。UIWebView的代理方法- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType拦截页面并获取网页链接fzw://send,经过处理,最后调用oc指定方法-(void)send,并返回NO取消跳转,从而达到js调用oc方法。
但xcode提示警告: PerformSelector may cause a leak because its selector is unknown
二、问题分析
编译器的警告对开发者来说是很有用的信息,但有时由于编译器的智商实在太低,会提示一些无谓的警告。当有些警告不想看到时,可以用如下代码消除警告。
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-W警告名称"
需要关闭警告的代码
#pragma clang diagnostic pop
三、问题解决
该警告的名称为-Warc-performSelector-leaks
1 /** 2 * 跳转判断 3 */ 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 5 { 6 NSString *urlString = request.URL.absoluteString; 7 NSLog(@"urlString:%@",urlString); 8 NSString *preString = @"fzw://"; 9 if([urlString hasPrefix:preString]) 10 { 11 NSString *methodString = [urlString substringFromIndex:preString.length]; 12 NSLog(@"methodString:%@",methodString); 13 #pragma clang diagnostic push 14 #pragma clang diagnostic ignored "-Warc-performSelector-leaks" 15 [self performSelector:NSSelectorFromString(methodString)]; 16 #pragma clang diagnostic pop 17 return NO; 18 } 19 return YES; 20 } 21 22 -(void)send 23 { 24 NSLog(@"%s",__func__); 25 }
以上是关于iOS 12学习系列:针对Xcode的警告忽略消除处理的主要内容,如果未能解决你的问题,请参考以下文章