一、问题描述

html代码如下

 <html>
<head>
<meta charset="utf-8"/>
<title>我的网页</title>
<script type="text/javascript">
function JS2OC()
{
window.location.href="fzw://send";
}
</script>
</head>
<body>
<input value="js调用oc" type="button" onclick='JS2OC();'></input>
</body>
</html>

显示效果如下

oc代码如下

 /**
* 跳转判断
*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *urlString = request.URL.absoluteString;
NSLog(@"urlString:%@",urlString);
NSString *preString = @"fzw://";
if([urlString hasPrefix:preString])
{
NSString *methodString = [urlString substringFromIndex:preString.length];
NSLog(@"methodString:%@",methodString);
[self performSelector:NSSelectorFromString(methodString)];
return NO;
}
return YES;
} -(void)send
{
NSLog(@"%s",__func__);
}

点击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

 /**
* 跳转判断
*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *urlString = request.URL.absoluteString;
NSLog(@"urlString:%@",urlString);
NSString *preString = @"fzw://";
if([urlString hasPrefix:preString])
{
NSString *methodString = [urlString substringFromIndex:preString.length];
NSLog(@"methodString:%@",methodString);
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:NSSelectorFromString(methodString)];
#pragma clang diagnostic pop
return NO;
}
return YES;
} -(void)send
{
NSLog(@"%s",__func__);
}

针对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. Android布局属性大全

    RelativeLayout http://wenku.baidu.com/view/2e39724333687e21af45a97e.html?from=related&hasrec=1 h ...

  2. 我常用的eclipse快捷键

    重写父类方法:右键点击, 进source,进override/implement 单行注释(或多行注释) Ctrl+/ 文档注释:shift+alt+J 整块注释: Ctrl+shift+/ 取消整块 ...

  3. 大熊君大话NodeJS之------Buffer模块

    一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...

  4. 【PHP面向对象(OOP)编程入门教程】22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  5. Linux/CentOS配置:使用yum update更新时不升级内核的方法

    RedHat/CentOS/Fedora使用 yum update 更新时,默认会升级内核.但有些服务器硬件(特别是组装的机器)在升级内核后,新的内核可能会认不出某些硬件,要重新安装驱动,很麻烦.所以 ...

  6. Swift2.1 语法指南——可空链式调用

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  7. UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

    混淆了 python2 里边的 str 和 unicode 数据类型. 1. 对需要 str->unicode 的代码,可以在前边写上 import sys reload(sys) sys.se ...

  8. Android中使用SQLiteOpenHelper管理SD卡中的数据库

    使用Android中自带的SQLiteOpenHelper可以完成数据库的创建与管理,但有两点局限: (1)数据库创建在内存卡中,大小受限,创建位置位于/data/data/应用程序名/databas ...

  9. Svn + tomcat + Hudson持续集成部署

    1.首先下载hudson 2. 我这里使用hudson-3.0.1版本 3. 下载后hudson是一个 war 包 4. 操作部署: (1). 直接将hudson的war包复制到tomcat的weba ...

  10. [codevs2070]爱情之路

    [codevs2070]爱情之路 试题描述 yh非常想念他的女朋友小y,于是他决定前往小y所在的那块大陆. 小y所在的大陆共有n个城市,m条双向路,每条路连接一个或两个城市.经过一条路ei需要耗费时间 ...