CLang error (objective C): value stored during initialization is never read
Foo *oFoo = [[[Foo alloc] init] autorelease];
This is how I was taught to program in Objective C, yet the CLang error checker complains that the initial value was never read. But oFoo is an object with properties. oFoo itself has no single v开发者_如何转开发alue. The property values are what matter.
oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."
Should I just ignore this? Is this worth fixing? What is the fix, seeing that "initial value" is meaningless in my context?
Usually that means:
- You've created a variable.
- You've assigned some value to a variable. Doesn't matter, to itself or to it's properties.
- You've "recreated" this value or finished block (method/for-each/etc.).
For a simple type:
int a;
a = 2;
a = 3;
First value (2) is never used. Similar things can happen with objects, for example:
Foo *oFoo = [[[Foo alloc] init] autorelease];
oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."
oFoo = [[[Foo alloc] init] autorelease];
Here first alloc-init block created a value that was overridden by second alloc-init. And error tells something like that.
Instead of second alloc-init block I can close method implementation, that will be similar.
I think Alexander Babaev may be right. Here's actual code:
Part *oPart = [[[Part alloc] init] autorelease];
iParts = aParts.count;
for (iPart=0;iPart<iParts;iPart++) {
oPart = [aParts objectAtIndex:iPart];
aPart is an array of Part objects. Maybe I should eliminate the first line and the last line should look like this:
Part *oPart = [aParts objectAtIndex:iPart];
If I do that, I DO NOT have to explicitly release oPart at the end of the loop. By declaring oPart before the loop begins, I was trying to be efficient and just reuse the oPart object, rather than create/release each time through the loop.
Anybody know which is the better approach?
精彩评论