调试技巧汇总

以下是小编在其他博客中摘取下来觉得平时开发会用得上或者现在已经在用得的调试技巧,列一个汇总。


如有侵权,请告知,删除


1、【Analyze分析器】

Analyze分析器是一种静态的工具,可以对我们的程序进行分析,找出我们未使用的变量,或一些死存储。执行Analyze如下:Product-->Analyze. 如下蓝色的标记就是静态分析的结果。


1458285262965700.png

调试技巧汇总_第1张图片
1458285266802276.png

当然,我们可以设置在编译程序的时候同时Analyze,把下列选项设为Yes即可。


1458285317829644.png
2、【僵尸对象】

iOS中把那些已经release但还没完全消失的对象叫做僵尸对象,对已经release的对象再次释放,就会发生异常。虽然自从使用ARC后,由于对象释放产生的异常已经大大变少,但偶尔还会出现。开启僵尸对象模式后,就能快速定位到异常位置。开启方式如下:Product-->Scheme-->Edit Scheme. 勾选Enable Zombie Objects即可。


调试技巧汇总_第2张图片
1458285374964168.png
3、【NSLog打印】

备注:打印的信息越详细,定位问题的更迅速。调试的必备品
应该说NSLog打印信息是初学者最喜欢的调试手法,也是最简单的调试,通过打印出的信息查看程序运行的路径。但是打印出的信息较少,本身NSLog效率较低,有人使用宏做了部分优化,代码如下:能够打印出所在类名、所在方法名、详细时间、行号。

#import "ViewController.h"  
   
#define NSLog(format, ...) do { \  
fprintf(stderr, " %s\n", \  
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \  
__LINE__, __func__); \  
(NSLog)((format), ##__VA_ARGS__); \  
fprintf(stderr, "-------\n"); \  
} while (0)  
   
@interface ViewController ()  
  
@end  
   
@implementation ViewController  
   
- (void)viewDidLoad {  
   
    [super viewDidLoad];  
    for (int i = 0; i < 5; i++) {  
        NSLog(@"我的值:%d",i);  
    }  
}  
   
@end

打印结果如下:


调试技巧汇总_第3张图片
1458285497265966.png
4、【init 和 dealloc】

对于ViewController来说,有两个生命周期函数我们可以进行重写,也就是init和dealloc方法。对于某些对象的状态,我们可以在这两个方法中查看。尤其是在dealloc中可以看到当ViewController退出的时候某个对象是否release。

- (instancetype)init  
{  
    self = [super init];  
    if (self) {  
        //初始化语句;  
    }  
    return self;  
}  
   
- (void)dealloc  
{  
    //释放后调用;  
}
5、【查看代码运行时间】

备注:这也是优化代码时常用的技巧。
有时候我们想要准确的知道某段代码、某个循环执行的时间,然后分析效率等问题,这个时候就需要执行时间是多少。正好看到网上已经有人做了这个工作,我就直接摘下来了。正好也用了宏的方式计算时间,我们只要在需要计算时间的代码块前后写上TICK,TOCK宏即可。当然,原理也是非常的简单,也就是使用NSDate计算差值。

#import "ViewController.h"  
   
#define TICK   NSDate *startTime = [NSDate date]  
#define TOCK   NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])  
   
@interface ViewController ()  
   
@end  
   
@implementation ViewController  
   
- (void)viewDidLoad {  
   
    [super viewDidLoad];  
   
    TICK;  
    for (int i = 0; i < 5; i++) {  
        NSLog(@"我的值:%d",i);  
    }  
    TOCK;  
}  
   
@end

打印结果如下:


调试技巧汇总_第4张图片
1458285597951238.png
6、【手机截屏】

手机截屏也算调试?哈哈。其实也算是开发中的一个小技巧哈。其实大家都会在iPhone上同时按电源键+Home键截屏,然后使用各种通讯软件发给其他人,这个略显不方便。我们来使用Xcode中的方式截屏。当手机接上电脑后,注意要把调试设备选为自己的手机:

1458285621329449.png

然后选择 Debug-->View Debugging-->Take Screenshot... .然后可以看到手机屏幕已经在你的电脑桌面了。是不是比直接在手机上操作方便多了呢?这样就可以快速的发给其他开发者、PM等人了。

7、【视图调试】

备注:跳槽后总会接触一些别人已经开发的项目上做二次开发,甚至三次、四次开发,对于一些复杂的界面使用下面的方法就能迅速的了解界面UI的构成,帮助你阅读代码。视图调试还有另外一个神奇:Reveal。这里就不做过多的介绍,感兴趣的朋友可以百度
如今iOS开发的UI设计有很多种方式,比如storyboard,xib,代码实现。对于stoayboard,xib可视化实现是比较简单的,但是对于一些“iOS老程序员”而言,都喜欢使用代码实现UI,并且可能UI层次还比较复杂。这样就给我们新接手项目的开发者带来很多困扰。如何快速查看一个复杂UI的界面层次和布局,最快的方法就是用到视图调试。
当项目运行到某一个界面(可以是模拟器或真机)时,开启视图调试,点击按钮如图:

1458285653300598.png

这样就会进入试图调试,你可以很方便的查看这个界面。这里可以看到控件之间的层次关系。
调试技巧汇总_第5张图片
1458285692760026.png

左侧的树形层次图可以在查看线程、队列和UI之间切换:

你可能感兴趣的:(调试技巧汇总)