2
Foo *oFoo = [[[Foo alloc] init] autorelease];

这就是我被教导在 Objective C 中编程的方式,但 CLang 错误检查器抱怨从未读取过初始值。但是 oFoo 是一个具有属性的对象。oFoo 本身没有单一值。属性值很重要。

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

我应该忽略这个吗?这值得修复吗?看到“初始值”在我的上下文中没有意义,解决方法是什么?

4

2 回答 2

9

通常这意味着:

  1. 您已经创建了一个变量。
  2. 您已经为变量分配了一些值。没关系,对它本身或对它的属性。
  3. 您已经“重新创建”了这个值或完成了块(方法/for-each/等)。

对于简单类型:

int a;
a = 2;
a = 3;

第一个值 (2) 从未使用过。类似的事情也可能发生在对象上,例如:

Foo *oFoo = [[[Foo alloc] init] autorelease];

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

oFoo = [[[Foo alloc] init] autorelease];

这里第一个 alloc-init 块创建了一个被第二个 alloc-init 覆盖的值。错误说明了类似的事情。

我可以关闭方法实现,而不是第二个 alloc-init 块,这将是相似的。

于 2010-04-15T15:30:21.337 回答
0

我认为亚历山大·巴巴耶夫可能是对的。这是实际代码:

Part *oPart = [[[Part alloc] init] autorelease];
iParts = aParts.count;
for (iPart=0;iPart<iParts;iPart++) {
    oPart = [aParts objectAtIndex:iPart];

aPart 是 Part 对象的数组。也许我应该删除第一行,最后一行应该是这样的:

Part *oPart = [aParts objectAtIndex:iPart];

如果我这样做,我不必在循环结束时显式释放 oPart。通过在循环开始之前声明 oPart,我试图提高效率并重用 oPart 对象,而不是每次都通过循环创建/释放。

有人知道哪种方法更好吗?

于 2010-04-16T03:07:27.857 回答