iOS开发调试Xcode总结

xcode快捷键

快捷键 描述
command shfit + Y 调出Debug控制台
command + T 新建一个选项卡
command shfit + 】 在选项卡之间切换
command option + 】 当前行代码向上移动
cmd + ctrl + E 先选中要替换的内容,再按 cmd + ctrl + E,便会高亮

1、废弃方法说明

NS_AVAILABLE_IOS(5_0):
这个方法可以在iOS5.0及以后的版本中使用。如果我们在比指定版本更老的版本中调用这个方法,就会引起崩溃。
NS_DEPRECATED_IOS(2_0, 6_0):
这个宏中有两个版本号。前面一个表明了这个方法被引入时的iOS版本,后面一个表明它被废弃时的iOS版本。被废弃并不是指这个方法就不存在了,只是意味着我们应当开始考虑将相关代码迁移到新的API上去了。
 NS_AVAILABLE(10_8, 6_0):
这里的NS_AVAILABLE宏告诉我们这方法分别随Mac OS 10.8和iOS 6.0被引入。
NS_DEPRECATED(10_0, 10_6, 2_0, 4_0):
这里表示这个方法随Mac OS 10.0和iOS 2.0被引入,在Mac OS 10.6和iOS 4.0后被废弃。

2、打印log

#ifdef DEBUG
#define Log(...) NSLog(__VA_ARGS__)
#else
#define Log(...)
#endif
#ifdef DEBUG
#define CLLog(format, ...) printf("[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);
#else
#define CLLog(format, ...)
#endif

3、 pch注意点:

  • 1.pch需要提前编译
  • 2.需要做一些判断,判断下当前有没有c文件,如果有c,就不导入OC的语法
    OBJC每个OC文件都会自动定义这个宏
    #ifdef __OBJC__

    4、去除无用日志

解决方法:【product】-【scheme】-【Edit Scheme】-【Run】-【Argument】-【Environment Variable】添加key:Value【OS_ACTIVITY_MODE : disable】即可。

5.PerformSelector may cause a leak because its selector is unknown

#pragma clang diagnostic push
#pragma clang diagnostic ignored   "-Warc-performSelector-leaks"
                    [vc performSelector:NSSelectorFromString(@"reloadTableViewRightNow")];
#pragma clang diagnostic pop

6.自定义log

// 宏里面的可变参数:...
// 函数中可变参数: __VA_ARGS__

#define AMLog(...) NSlog(___VA_ARGS__)

-----------------------------------------------


#ifdef DEBUG // 调试阶段
#define AMLog(...)  NSLog(__VA_ARGS__)

#else // 发布阶段

#define AMLog(...)

#endif

项目有可能和 c 和 c++ 混编,解决这种情况,需要


#ifdef __OBJC__

// 这里放 OC 代码

#endif

在xcode中使用#pragma

在开发过程中我们可以在方法前面加上下面代码来提供类似方法注释功能,该功能在提供注释的同时也方便在代码区上方的导航条中快速定位自己的方法:

#pragma mark - Message 

然后在代码过程中如果有一些想要忽略的警告(注意不是致命错误!)可以在文件顶端加入:

    #pragma clang diagnostic ignored "-W警告名" 
  • 例如针对代码中有没有使用过的变量系统会提示Unused variable ‘variable’,这是就可以使用’-Wunused’或者’-Wunused-variable’来忽略该警告!

  • 不知道大家对于版本适配是怎么做的,我是在判断版本号之后针对不同的版本做不同的处理,但是一些过去的版本一些方法已经禁用,

  • 这时候一些有些小洁癖的人可以加入:

    #pragma clang diagnostic ignored "-Wdeprecated"  
  • 但是这样有些自己不知道但是已经过期的方法也会被屏蔽了,所以可以使用分段屏蔽警告:
#pragma clang diagnostic push  
#pragma clang diagnostic ignored "-Wdeprecated"  
    [NSURLConnection connectionWithRequest:request delegate:self];  
#pragma clang diagnostic pop 

在push的时候开启,在pop的时候结束,其中在ignored开始后忽略报警

针对于警告,其实我们一般平时练习项目中使用到的warning只是一小部分而已,在项目的building setting里面搜索warning,

我们可以看到在Apple LLVM 下针对语言类型甚至是所有语言有许多关于警告的开关,大家可以一起去了解下!

如果我们追求代码的严苛和谨慎我们可以添加一些我们平常没有使用的警告.

在这里我们可以在Other C Flags 中加入-Wall,-Wextra,-Weverything来添加警告,当然针对调试过程中不推荐!容易让人精神崩溃!

在这里需要说明的是-Wall并不是所有的警告,只是包含了警告中的大部分,如果想要开启全部警告-Weverything!

这里面的警告有许多事编译器开发人员所使用的警告,但是同时也能让我们的代码更加清晰,规范!推荐代码release的阶段最好开启其他警告!

最后我们可以在项目中加入:

    #warning this is a warning  

来添加一个警告,提醒我们可能还有一些注意的地方!

甚至我们可以加入一些:

#error This is a error 

来添加一个严重警告,提醒我们还有一些比如做的事没有做完,比如在编写第三方库的时候需要添加其他库,

我们可以手动添加严重警告,这样比在注释中添加说明要醒目的多!

#pragma message "This is a warning"
#warning "This is another warning"

   转载规则


《iOS开发调试Xcode总结》 刘星星 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
HTTP协议总结 HTTP协议总结
HTTP协议按层次分,TCP 位于传输层,提供可靠的字节流服务。所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大 块数据分割成以报文段(segment)为单位的数据包进行管理。而可 靠的传输服务是指,
下一篇 
iOS开发调试常见错误总结 iOS开发调试常见错误总结
1、bitcode: 解决办法:2、ShareSDK各社交平台申请APPkey 的网址及申请流程汇总1、新浪微博登录异常你所访问的站点在微博认证失败,请联系XXXX: 原因很可能是sina的sso填写错误。 2、登录时跳转到新浪
2016-10-30
  目录