来自: http://www.cnblogs.com/dsxniubility/p/4757760.html

iOS警告收录及科学快速的消除方法

 

 

前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作。其实大部分的警告都是很好改的,把自己整个项目的警告撸一遍应该也就耗费半小时的时间,一次麻烦带来之后的清净这样不好么?

本文分为三个部分:1.简单粗暴的消除警告。 2.详细科学的消除警告。(包括警告收录)  3.添加警告。

如果你不是在董铂然博客园看到本文,请点击查看原文

一、简单粗暴的消除警告

警告如果是自己项目中的还好直接改了,如果是第三方库,你改了之后,pod下作者更新一下又白改了,所以可以用这种简单粗暴的方法:直接让第三方库的警告不显示

就是在podfile文件里面加上一行指令 。

inhibit_all_warnings!

如果某警告实在无法消除,但是又不想让他显示,可以加入预编译指令

比如我已经知道某行会报上面警告了,我就用这个宏把这几行包住,就不会报引号中-Wunused-variable的警告了

1
2
3
4
5
6
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wunused-variable"
 
               //这里是会报警告的代码
 
#pragma clang diagnostic pop

这个-Wunused-variable代表的意思就是 有的东西 你实例化了但是没有使用(同上面第几条)。 但是如何得到一个警告的标示符?

如图选择一个警告,点击右键,reveal in log  就能看到右边有个方括号[]里面的东西就是 这个警告对应的标示符

如果希望整个项目中都忽略 某种很无聊的警告,就在项目中Build Setting里加上这个标示符,可以连着加的。

如果不想整个项目都忽略,只想个别文件忽略,那就找到个别文件加上此指令,这个操作应该使用率不高(一般都是全项目忽略),就不上图了。去Build Phases 里面的 Compile Sources里面改。

二、详细科学的消除警告

其实笔者本意是想把一些第一眼看不懂比较坑的警告收录进来,但是后来发现那基本没几个需要些写了,所以就采用了全收录的方法,遇到的就记录下以后也会不断更新。 可以直接按command+F 在本页面搜索警告

Unused variable 'replyURL'

1.没有使用

Cannot find protocol definition for 'TencentSessionDelegate'

2.这种明明都能运行还说我没有定义的警告,是因为你这个协议虽然定义了,但是你这个协议可能还遵守了XX协议,然后这个XX协议没有定义导致会报这种警告,所以遇到这种警告要往“父协议”找。 举个栗子,上面这行就是腾讯授权的库里面报的警告,

@protocol TencentSessionDelegate<NSObject, TencentLoginDelegate, TencentApiInterfaceDelegate, TencentWebViewDelegate>

此协议遵守了TencentApiInterfaceDelegate协议,在TencentOAuth.h类中#import "TencentApiInterface.h" 警告可破

Null passed to a callee that requires a non-null argument

3.这个警告比较新,是xcode6.3开始 为了让OC也能有swift的?和!的功能,你在声明一个属性的时候加上 __nullable(?可以为空)与__nonnull(!不能为空) 如果放在@property里面的话不用写下划线

@property (nonatomic, copy, nonnull) NSString * tickets;

@property (nonatomic, copy) NSString * __nonnull tickets;

或者用宏NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END 包住多个属性全部具备nonnull,然后仅对需要nullable的改下就行,有点类似于f-no-objc-arc那种先整体给个路线在单独改个别文件的思想。 此警告就是某属性说好的不能为空,你又在某地方写了XX = nil 所以冲突了。

Auto property synthesis will not synthesize property 'privateCacheDirectory'; it will be implemented by its superclass, use @dynamic to acknowledge intention

4.他说你的父类实现了setget方法,但是如果你什么都不写,就会系统自动生成出最一般的setget方法,请用@dynamic 来承认父类实现的这个getset方法。

Unsupported Configuration: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.

5.一般是storyboard报的警告,简而言之就是你有的页面没有和箭头所指的控制器连起来,导致最终改页面可能无法显示。

Deprecated: Push segues are deprecated in iOS 8.0 and later

6.iOS8之后呢,不要再用push拖线了,统一用show,他会自己根据你是否有导航栏来判断走push还是走modal

Unsupported Configuration: Plain Style unsupported in a Navigation Item

7.导航栏的item 不支持用plain ,那就用Bordered呗。

The launch image set "LaunchImage" has 2 unassigned images.

The app icon set "AppIcon" has 2 unassigned images.

8.几张图标还是启动图找不到自己的位置,可能是一次导入了全部尺寸图片,但是右边的设置只勾了iOS8的 那iOS7尺寸的图标就会报此警告。删掉,或者对照右边匹配。

'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context:

9.方法废除,旧的方法sizeWithFontToSize在iOS7后就废除了取而代之是boundingRectWithSize方法

Undeclared selector 'historyAction'

10.使用未声明的方法,一般出现在@selector() 括号里写了个不存在的方法或方法名写错了。

PerformSelector may cause a leak because its selector is unknown

11.这个和上面类似就是直接把上面那个@SEL拿来用会报这个警告

'strongify' macro redefined

12.这个宏声明重复,删一个吧

'UITextAttributeFont' is deprecated: first deprecated in iOS 7.0 - Use NSFontAttributeName

'UITextAttributeTextColor' is deprecated: first deprecated in iOS 7.0 - Use NSForegroundColorAttributeName

'UITextAttributeTextShadowColor' is deprecated: first deprecated in iOS 7.0 - Use NSShadowAttributeName with an NSShadow instance as the value

13.方法废除,一般一起出现

Code will never be executed

14.他说这代码永远也轮不到他执行,估计是有几行代码写在了return之后

Assigning to 'id<SXTableViewDelegate>' from incompatible type 'SXTabViewController *const __strong'

15.一般出现在xxx.delegate = self ,应该在上面遵守协议

Format specifies type 'unsigned long' but the argument has type 'unsigned int'

16.这个警告一般会出现在NSStringWithFormat里面 前面%d %lu 什么的和后面填进去的参数不匹配就报了警告

Values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead

17.类似于上面,也是format里面前后写的不匹配

Method 'dealWithURL:andTitle:andKeyword:' in protocol 'SXPostAdDelegate' not implemented

18.经典警告,遵守了协议,但是没有实现协议方法。 也可能你实现了只是又加了个参数或是你写的方法和协议方法名字有点轻微不同

Using integer absolute value function 'abs' when argument is of floating point type

19.这个可以自动修正,就是说abs适用于整数绝对值,要是float取绝对值要用fabsf

Attribute Unavailable: Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0

20.有的方法你用的太落后了,也有的方法你用的太超前了。 说这个最大宽度在iOS8之前的系统是要坑的

Too many personality routines for compact unwind to encode

21.你可以在otherlink 中加入 -Wl,-no_compact_unwind 去掉该警告,根据苹果的解释,这个是由于某些地方 c/c++/oc/oc++混用会造成编译警告。一般没有什么伤害。

Property 'ssid' requires method 'ssid' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation

22.说这个ssid必须要定义个这个属性的getter方法,如果警告是setSsid就是setter方法, 用@synthesize和@dynamic 都行,一个是让编译器生成getter和setter,一个是自己生成,如果你有模型分发或kvc之类的,选@dynamic就行

Unknown escape sequence '\)'

23.未知的转义序列。 一般有个斜杠再加个东西他都会以为是转义字符,一看\)不认识就报警告了,一般正则表达式容易报这种警告

Property 'LoginPort' not found on object of type 'LoginLvsTestTask *'; did you mean to access property loginPort?

24.这种可以点击自动修复,是典型的大小写写错了,他提醒了一下。

Variable 'type' is used uninitialized whenever switch default is taken

25.这是出现在switch语句中的警告, 一般可能是switch外面定义了个type但是并没有初始化(初始化操作都写在switch的各个分支里),然后在最后return type。 但是switch的有个分支没有对type初始化,他说如果你来到这个分支的话,那还没初始化就要被return。

三、添加警告

1.首先最常用的就是 普通警告,这也没什么好说的了

1
#warning TODO

2.如果是自己写的文件或第三方库,有了新的接口,然后提示旧的接口废除的话需要在方法后加上宏NS_DEPRECATED_IOS和范围

1
- (void)addTapAction:(SEL)tapAction target:(id)target NS_DEPRECATED_IOS(2_0, 4_0);

3.如果需要在此方法后加上带信息的警告则需要这么写

1
- (void)addTapAction:(SEL)tapAction target:(id)target __attribute((deprecated("这个接口会爆内存 不建议使用")));

显示的效果像这样:

iOS警告收录及科学快速的消除方法的更多相关文章

  1. iOS 警告收录及科学快速的消除方法

    http://www.cocoachina.com/ios/20150914/13287.html 作者:董铂然 授权本站转载. 前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉 ...

  2. iOS 警告收集快速消除

    1.ld: warning: directory not found for option 去掉警告的方法 工程老是提示ld: warning: directory not found for opt ...

  3. SQL关于:警告: 聚合或其他 SET 操作消除了空值。

    方法一: create table tb ( id int, num int ) insert into tb select 1,10 insert into tb select 1,20 inser ...

  4. bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法

    bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法 bootsrtap框架做的h5页面,在android手机下没有卡顿问题,在苹果手机就一直存在这问题,开始毫无头绪 ...

  5. SEO提高网站排名快速见效的方法

    SEO如何提升网站排名?seo中文名称搜索引擎优化,是提升网站排名的一种技术手段,常用的手段就是优化标签,内链外链等等,最核心的优化方向,“关键词”.最常见的表现形式就是软文,但是有的时候就算你做了很 ...

  6. EXCEL快速自动填充方法集锦

    EXCEL快速自动填充方法集锦 原文地址,转载请注明:http://www.cnblogs.com/croso/p/5396841.html 方法一: 名称框输入a1:a1000回车,1, ctrl+ ...

  7. iOS出现<object returned empty description>的解决方法

    iOS出现<object returned empty description>的解决方法: 使用  [str length] <= 0  判断处理

  8. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  9. iOS开发之动画编程的几种方法

    iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...

随机推荐

  1. 4种解决json日期格式问题的办法

    4种解决json日期格式问题的办法   开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下 ...

  2. NPOI操作EXCEL(六)——矩阵类表头EXCEL模板的解析

    哈哈~~~很高兴还活着.总算加班加点的把最后一类EXCEL模板的解析做完了... 前面几篇文章介绍了博主最近项目中对于复杂excel表头的解析,写得不好,感谢园友们的支持~~~ 今天再简单讲诉一下另一 ...

  3. JavaScript-简单的贪吃蛇小游戏

    实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...

  4. 工作邮件loop的用法

    examples come from native speaker Put john in the loop about this. He will have good advice. Why hav ...

  5. redis分片

    本文是在window环境下测试 什么是分片 当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储 那么当多个请求来取数据时,如何知道数据在哪个redis呢,redis有 ...

  6. ASP.NET 正则替换URL参数值

    public class HomeController : Controller { public ActionResult Index() { var url = "http://www. ...

  7. Redis 常用操作

    import org.junit.Before;import org.junit.Test;import redis.clients.jedis.Jedis;import java.util.Set; ...

  8. QGEditors.WinForms WinForms下使用的部分扩展控件

    Nuget: https://www.nuget.org/packages/QGEditors.WinForms/ PM> Install-Package QGEditors.WinForms ...

  9. MySQL索引原理及慢查询优化

    原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...

  10. 谷歌浏览器,火狐浏览器,ie浏览器解析顺序

    谷歌(版本 55.0.2883.87 m),火狐(48.0.2),ie(11.576.14393.0)对三个浏览器简单的进行了一下试验发现,谷歌浏览器是等到html全部解析完毕之后才开始渲染,而另外两 ...