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,该怎么做。?请看我编辑的问题。谢谢你之前的解释谢谢你的回答。