开篇:
在我们对项目进行打包发布前,如果能够对项目进行静态分析一下,也就是使用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];” 这行代码放到方法最后一行;