官网地址:(点击最下方【阅读原文】可直达)https://tca.tencent.com/
官网介绍:https://cloud.tencent.com/product/tcap 官方开源:https://github.com/Tencent/CodeAnalysis 国内镜像:https://git.code.tencent.com/Tencent_Open_Source/CodeAnalysis
▼
下列案例以Objective-C代码为例,对应代码分析规则:LeakOfReturn——用于检测代码中可能存在的内存泄漏问题。
通过应用规则,开发人员可以在编码阶段就发现潜在的内存泄漏问题,并及时修复,以提高代码的质量和性能。
LeakOfReturn属于编译型工具规则,需要在安装有Xcode、且具备项目编译环境的Mac机器上执行代码分析,并且在分析方案中配置项目的xcodebuild编译命令。
▼
问题描述
在方法中进行内存分配并返回该对象时,未遵循Cocoa的内存管理命名规范(即函数名需要以 copy,mutableCopy,alloc,new开头),那么返回的对象可能会导致内存泄漏。
代码案例
案例分析
在createString
方法中,分配了一个新的NSString
对象str
,但是没有遵循Cocoa的内存管理规则。根据Cocoa的内存管理规则,如果一个方法的名称不是以copy
、mutableCopy
、alloc
或new
开头,那么它应该返回一个自动释放的对象。在这个例子中,createString
方法的名称不符合这些规则,因此它返回的对象可能会导致内存泄漏。
解决方案
为了修复这个问题,我们可以将createString
方法的名称更改为以copy
、mutableCopy
、alloc
或new
开头,或者在方法内部使用autorelease
来确保返回的对象在适当的时候被释放。
// MyClass.m
// OCTest
//
- (NSString *)newString {
NSString *str = [[NSString alloc] initWithFormat:@"Hello, World!"];
return str;
}
autorelease
// MyClass.m
// OCTest
//
- (NSString *)createString {
NSString *str = [[[NSString alloc] initWithFormat:@"Hello, World!"] autorelease];
return str;
}