在多个if语句或嵌套ifs

时间:2017-08-10 06:28:58

标签: objective-c

我有一些场景,我分配init变量,然后用一些数据初始化它。对于例如

ABCClass *objectAbc = [[ABCClass alloc] init];  //---- Analyser warning
objectAbc = someOtherObjectOfThisKind;

NSArray *array = [NSArray array];              //---- Analyser warning
array = arrayOfArrays[0];

在两种情况下,分析仪都会给我警告value never read。初始化变量的正确方法是什么。我是否增加了保留计数?

如果我们有多个ifs,如何初始化变量,可以说,

- (void)computeVariable {
    NSString *var = @"";     // ----Analyser Warning
    if ( [someLabel isEqualToString @"A"] ) {
       var = @"A";
    }
    if ( [someLabel isEqualToString @"B"] ) {
      var = @"B";
    }
... remaining code
}

1 个答案:

答案 0 :(得分:4)

您的第一个语句声明了一个变量,并为其指定了一个类型为ÀBCClass`的新对象。第二个语句为此变量分配另一个对象。因此,第一个语句的对象被释放(ARC),并且您的程序从不使用它。你应该把这两行写成

ABCClass *objectAbc = someOtherObjectOfThisKind;

并且分析器消息将消失。变量array也是如此。

如果您使用ARC,则无法明确保留变量。如果您正在使用MRC,则[[ABCClass alloc] init]有一个内存泄漏,因为您没有向此对象发送release。另一方面,由于Objective C的内存管理规则,[NSArray array]在MRC中不会泄漏。

编辑的附录:如果在if块之后使用var,则不会收到分析器警告,因为即使两个条件都为假,也会使用var的初始值。如果仅在{if}块中使用var,则会收到分析器警告。在这种情况下,您应该在每个if块中移动var的声明,或者不初始化它,e。 G。 NSString *var;