Objective c 在多个if语句或嵌套if中初始化变量的正确方法
我有一些场景,我分配初始化变量,然后用一些数据初始化它。例如Objective c 在多个if语句或嵌套if中初始化变量的正确方法,objective-c,Objective C,我有一些场景,我分配初始化变量,然后用一些数据初始化它。例如 ABCClass *objectAbc = [[ABCClass alloc] init]; //---- Analyser warning objectAbc = someOtherObjectOfThisKind; NSArray *array = [NSArray array]; //---- Analyser warning array = arrayOfArrays[0]; 在这两种情况下,分
ABCClass *objectAbc = [[ABCClass alloc] init]; //---- Analyser warning
objectAbc = someOtherObjectOfThisKind;
NSArray *array = [NSArray array]; //---- Analyser warning
array = arrayOfArrays[0];
在这两种情况下,分析器都会向我发出警告值从不读取。初始化变量的正确方法是什么。我在增加保留计数吗
如何在有多个ifs的情况下初始化变量
- (void)computeVariable {
NSString *var = @""; // ----Analyser Warning
if ( [someLabel isEqualToString @"A"] ) {
var = @"A";
}
if ( [someLabel isEqualToString @"B"] ) {
var = @"B";
}
... remaining code
}
您的第一条语句声明了一个变量,并为其分配了一个类型为ÀBCClass`的新对象。第二条语句为该变量分配另一个对象。因此,第一条语句的对象被释放(ARC),并且永远不会被程序使用。你应该把这两行写成
ABCClass *objectAbc = someOtherObjectOfThisKind;
并且analyzer消息将消失。变量数组
也一样
如果您使用的是ARC,则无法显式保留变量。如果您使用的是MRC,则[[ABCClass alloc]init]
有一个内存泄漏,因为您没有向该对象发送release
。另一方面,由于目标C的内存管理规则,[NSArray array array]
在MRC中不会出现泄漏
编辑附录:如果在If块后使用var
,则不会得到analyzer警告,因为即使这两个条件都为false,也会使用var
的初始值。如果var
仅在if块内使用,您将收到analyzer警告。在这种情况下,您应该在每个if块中移动var
的声明,或者不初始化它,例如。g<代码>NSString*var代码>您的第一条语句声明了一个变量,并为其分配了一个类型为ÀBCClass`的新对象。第二条语句为该变量分配另一个对象。因此,第一条语句的对象被释放(ARC),并且永远不会被程序使用。你应该把这两行写成
ABCClass *objectAbc = someOtherObjectOfThisKind;
并且analyzer消息将消失。变量数组
也一样
如果您使用的是ARC,则无法显式保留变量。如果您使用的是MRC,则[[ABCClass alloc]init]
有一个内存泄漏,因为您没有向该对象发送release
。另一方面,由于目标C的内存管理规则,[NSArray array array]
在MRC中不会出现泄漏
编辑附录:如果在If块后使用var
,则不会得到analyzer警告,因为即使这两个条件都为false,也会使用var
的初始值。如果var
仅在if块内使用,您将收到analyzer警告。在这种情况下,您应该在每个if块中移动var
的声明,或者不初始化它,例如。g<代码>NSString*var代码>可能重复如果我们有多个IFS或嵌套IFS,如何执行此操作的可能重复。?请看我编辑的问题。谢谢你之前的解释谢谢你的回答。如果我们有多个IFS或嵌套IFS,该怎么做。?请看我编辑的问题。谢谢你之前的解释谢谢你的回答。