iOS 中强制去除警告的方法

在使用xcode进行iphone应用开发时,经常需要添加一些第三方的类库,而一些第三方的类库由于缺少维护,从而导致类库中含有各种警告和各种内存泄漏,但并不影响运行.
倘若我们需要用到第三方库,而由不想在代码分析时看到这些库的警告或内存泄漏,我需要这样做:

#pragma clang diagnostic push  
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"  
    //含警告的代码,如下,btn为UIButton类型的指针  
    UIView *view = btn;  
#pragma clang diagnostic pop  

“-Wincompatible-pointer-types”为警告类型

clang为编译器名,这里也可以替换为GCC

#pragma clang diagnostic ignored 后面只能跟一个忽略警告类型
如果需要同时忽略多种警告,需要这样写:

#pragma clang diagnostic push  
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"  
#pragma clang diagnostic ignored "-Wincomplete-implementation"  
    //含警告的代码,如下,btn为UIButton类型的指针  
    UIView *view = btn;  
#pragma clang diagnostic pop  

另外使用xcode的Analyze进行代码分析时,xcode会检查出程序的内存泄漏,这个不属于编译警告,我们需要添加一个宏来把这些代码忽略:

#ifndef __clang_analyzer__  
    //含内存泄漏的代码  
#endif  

iOS 上的开源正则扩展类 RegexKitLite 就是一个充满各种内存泄漏的类,尽管作者已经在该类上注释说可以忽略这些内存泄漏的提示,但作为一个有代码洁癖的程序员,我还是不想看到这些内存泄漏的警告提示.

//已知的一些编译警告类型  
-Wincompatible-pointer-types 指针类型不匹配  
-Wincomplete-implementation 没有实现已声明的方法  
-Wprotocol 没有实现协议的方法  
-Wimplicit-function-declaration 尚未声明的函数(通常指c函数)  
-Warc-performSelector-leaks 使用performSelector可能会出现泄漏
-Wdeprecated-declarations 使用了不推荐使用的方法(如[UILabel setFont:(UIFont*)])  
-Wunused-variable 含有没有被使用的变量  
-Wno-documentation 忽略注释不规范的警告

全局禁用警告

image.png
  1. code will never be executed
-Wno-unreachable-code   全局禁用警告
-Wunreachable-code      全局启用警告
  1. Unused Entity Issue / unused function 'xxxxx'
-Wno-unused-function    全局禁用
-Wunused-function       全局启用

附录

  1. IPHONEOS_DEPLOYMENT_TARGET is set to 8.0, but the range of supported deployment

  2. warning: Skipping duplicate build file in Compile Sources build phase: 在 project-targets-选中 target-Build Phases-Compile Sources 中删除重复的类

  3. xcode中如何抑制告警 Double-quoted include in framework header, expected angle-bracketed instead
    解决方案:先从左侧project 栏选中项目,然后进入到 Build Settings ,然后找到 Quoted Include In Framework Header,然后选 No

  4. 使用 os_unfair_lock 替换掉 OSSpinLock

#import <os/lock.h>
@interface ClassName () {
    os_unfair_lock _spinLock;
}
_spinLock = OS_UNFAIR_LOCK_INIT;
os_unfair_lock_lock(&_spinLock);
os_unfair_lock_unlock(&_spinLock);
  1. Pointer is missing a nullability type specifier
    NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END

  2. Building for iOS, but the linked and embedded framework '.framework' was built for iOS + iOS Simu...

  3. NSKeyedUnarchiver变更

// 存档
data = [NSKeyedArchiver archivedDataWithRootObject:object requiringSecureCoding:YES error:nil];
// 解档
object = [NSKeyedUnarchiver unarchivedObjectOfClasses:[NSSet setWithArray:@[NSArray.class,NSDictionary.class, NSString.class, NSMutableArray.class, NSMutableDictionary.class, NSMutableString.class, NSMutableData.class, NSData.class, NSNull.class, NSValue.class,NSDate.class]] fromData:item.value error:nil];

  1. Empty paragraph passed to '@param' command

其实原因就是注释不合苹果的要求,所以,出现了新的警告,要么修改这些警告为要求的格式,要么全局隐藏这些警告。

如何全局消除这些警告呢?
如下:在Other Warning Flags 里面添加-Wno-documentation

  1. This block declaration is not a prototype
typedef void(^transactionBlock)(); 

()里没有填写void,在xcode9之后中会提示一个警告

typedef void(^transactionBlock)(void);

但是这样,很多第三方要改,涉及的面太大了,目前可能不太适合,虽然这个是趋势.
或者,如果只是很少的地方,也可以使用彻底的暂时解决所有这种警告的方式
在工程的设置中
strict-prototypes设置为NO,则这些警告就消失了

  1. Block implicitly retains 'self'; explicitly mention 'self' to indicate this..

其中的意思是block中使用了self的实例变量_xxx ,因此block会隐式的retainself。Xcode认为这可能会给开发者造成困惑,或者因此而因袭循环引用,所以警告我们要显示的在block中使用self,以达到block显示retainself的目的。

方案一:
  按照Xcode提示,改成self->_xxx
方案二:
   Building Settings->CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF 设置为NO
  1. iOS 开发去除 CocoaPods 警告
    Fix Xcode Warning

因为从 Xcode8.0 开始,引入了文档注释的警告 。

点击查看更多警告处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,825评论 6 546
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,814评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,980评论 0 384
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 64,064评论 1 319
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,779评论 6 414
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,109评论 1 330
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,099评论 3 450
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,287评论 0 291
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,799评论 1 338
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,515评论 3 361
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,750评论 1 375
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,221评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,933评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,327评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,667评论 1 296
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,492评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,703评论 2 380

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 一个人走,一个人工作,一个人承受责任,一个人对话,为什么总是一个人?所有的选择都需要我自己面对,难道生活本来就是这...
    敏敏_7dec阅读 111评论 0 0
  • 天愈来得黑了 雨愈来得猛了 残叶依旧飘飞 有时风卷的急了 它也倦了,累了,就散了。
    由淘阅读 210评论 0 0
  • 远行需要勇气,或许偶尔的冲动会帮你一把,不在熟悉的环境里挣扎着。我不是一个很洒脱的人,即使给我100倍的勇气,我还...
    Du_DDong阅读 233评论 0 0