Xcode使用之静态分析Analyze

开篇:
在我们对项目进行打包发布前,如果能够对项目进行静态分析一下,也就是使用Xcode自带功能Analyze(快捷键Command+Shift+B),那是再好不过了。因为这能够帮助我们排掉代码中很多潜在的不容易发现的,比如内存泄露、未使用的函数和变量等问题。

这里强行插入苹果官方文档 Analyze your code for potential flaws

Analyze主要分析以下四种问题:

1、逻辑错误:访问空指针或未初始化的变量等;
2、内存管理错误:如内存泄漏等; 比如ARC下,内存管理不包括core foundation
3、声明错误:从未使用过的变量;
4、Api调用错误:未包含使用的库和框架。

但Analyze所做出的判断不一定准确,应该根据给出的提示结合代码去检查。

场景一:
Value stored to ‘***’ is never read.
这里写图片描述

代码中isReachable这个变量只是被赋值,并没有被使用,解除这个提示只需把isReachable给加以注释即可。

场景二:
instance variable used while ‘self’ is not set to the result of ‘[(super or self) init…]

- (instancetype)initWithType {
    if (self == [super init]) {
    }
    return self;
}

修改为

- (instancetype)initWithType {
    if (self = [super init]) {
    }
    return self;
}

场景三:
Potential leak of an object stored into ‘***’ (潜在的内存溢出)
这里写图片描述

这里的self.footView,申请了内存并进行了初始化,但全文中并没有使用,接着又将此变量重新赋值。

场景四:

The 'viewWillAppear:' instance method in UIViewController subclass '***' is missing a [super viewWillAppear:] call

根据提示,重写父类即可。

场景五:
nil returned from a method that is expected to return a non-null value
这里写图片描述

改为:

UICollectionReusableView *reusableview = [UICollectionReusableView new];

场景六:
The ’ * ’ ivar in ‘*’ was retained by a synthesized property but not released before ‘[super dealloc]’
这里写图片描述
这里写图片描述

把cellBackgroundView的属性声明retain改为assign/weak; 把 “[super dealloc];” 这行代码放到方法最后一行;

相关文章
相关标签/搜索