一、问题描述

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. }

针对Xcode的警告忽略消除处理的更多相关文章

  1. Xcode警告忽略

    Xcode中 cmd+B 之后总会出现各种各样的警告,对于一个对代码有洁癖的人,这种情况很难忍,接下来我们用些特殊手段强制消除这些警告  一.忽略源文件中的警告 使用编译器宏来操作 #pragma c ...

  2. 去掉xcode中警告的一些经验

    1.编译时,编译警告忽略掉某些文件 只需在在文件的Compiler Flags 中加入 -w 参数,例如: 2.编译时,编译警告忽略掉某段代码 #pragma clang diagnostic pus ...

  3. Xcode常见警告和错误

    Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is depreca ...

  4. Xcode编译警告Assigning to 'id<XXXDelegat> ——Nullable' from incompatible type 'XXXView *const_strong'

    编译报警告 可能是 自定义分类使用协议时出现与父类协议的冲突 解决方法如下:    

  5. Matlab警告消息消除

    在运行matlab程序时候,有些matlab子函数在高版本将会被舍弃,在使用的时候,matlab编译器就会报出警告信息. The COMBNTNS function will be removed i ...

  6. Xcode关闭警告

    对于关闭某个警告,如果需要全局关闭的话,直接在Other C Flags里写 -Wno-...就行了,比如 -Wextra -Wno-sign-compare 就是一个常见的组合.如果相对某几个文件开 ...

  7. iOS XCode工程 警告处理

    今天 老板说,群~你的警告⚠️蛮多的...我拍了胸脯,下周项目总结时候一定会完美解决!!! 于是我得把项目中全部警告解决了,加油

  8. 针对Xcode 9 + iOS11 的修改,及iPhone X的适配

    1,UIScrollView的automaticallyAdjustsScrollViewInsets 失效了. automaticallyAdjustsScrollViewInsets,当设置为YE ...

  9. xcode忽略警告

    1.对整个文件使用 你的工程 -> 你的target -> Build Phases -> Compile Sources -> 搜索要忽略警告的文件名,在 Compiler ...

随机推荐

  1. .ssh/config简单使用

    转自:http://blog.lizhigang.net/archives/265 .ssh/config简单使用 需求:  工作的电脑经常会存储不同的key,并且使用不同的用户登录linux系统.如 ...

  2. Linux服务器管理: 日志管理(一)

    1.日志管理介绍: a.日志服务:在CentOS6.x中日志服务以及由rsyslogd取代了原有的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日子文件的格 ...

  3. ubuntu安装ssh

    为了解决远程连接ubuntu服务器控制端,方便操作.ubuntu不同的版本安装方式一致!首先在ubuntu服务器下安装SSH服务linux安装命令:sudo apt-get install opens ...

  4. 软件测试-----Graph Coverage作业

    /******************************************************* * Finds and prints n prime integers * Jeff ...

  5. qstring与char*、基本数据类型的转换

    1.qstring转化为char* QString.toStdString.c_str() 2.char*转化为QString str = QString(QLatin1String(mm)); 3. ...

  6. Codeforces Round #335 Sorting Railway Cars 动态规划

    题目链接: http://www.codeforces.com/contest/606/problem/C 一道dp问题,我们可以考虑什么情况下移动,才能移动最少.很明显,除去需要移动的车,剩下的车, ...

  7. 【转】 js怎么区分出点击的是鼠标左键还是右键?

    IE 下 onMouseDown 事件有个 events.button 可以返回一个数值,根据数值判断取得用户按了那个鼠标键 events.button==0  默认.没有按任何按钮. events. ...

  8. 4. Linux常用命令

    1. ls  查看当前目录信息 2. pwd 查看当前目录 3. cd 切换目录  快捷操作:cd - 可快速对最近的两个目录切换, cd 或者cd~ 直接回到用户自己的主目录, 4. hwclock ...

  9. junk

    var mydate1 = new Date($('.stt').html()); var mydate2 = new Date($('.ett').html()); if (window.Activ ...

  10. 使用 Github Pages 发布你的项目文档

    导读 你可能比较熟悉如何用 Github Pages 来分享你的工作,又或许你看过一堂教你建立你的第一个 Github Pages 网站的教程.近期 Github Pages 的改进使得从不同的数据源 ...