Re: 3 obj-c/cocoa beginner q's
Re: 3 obj-c/cocoa beginner q's
- Subject: Re: 3 obj-c/cocoa beginner q's
- From: David Remahl <email@hidden>
- Date: Tue, 25 Mar 2003 16:12:55 +0100
1.
this is a bit of code from a book i'm following at the moment. it
feels like it might possibly be an inefficient way of doing things.
but then i could easily be wrong:
for (i = 0; i < [myArray count]; i++) {
....
....
}
doesn't this mean that the myArray object will get messaged for every
for loop execution? in other words if the array has 100 elements
myArray is going to get messaged a 100 times? or doesn't that matter?
wouldn't defining an int to hold [myArray count] before going into
the for loop, and using that int in the for loop arguments, therefore
only messaging myArray once, be a better way to do that? or not?
--- A reasonable question, but the [myArray count] is messaged only
once, because that's the way C for loops work. Read the details on
FOR loops - the arguments are evaluated only once to determine
parameters, then the loop is executed.
Just for the record, this statement is incorrect.
The second and third statements in a for loop description are executed
multiple times. The second statement is executed each time, before
running the loop, and if it evaluates to true, the loop spins another
time. And because [NSArray count] could have side effects (say, change
something that is read during the rest of the loop, or maybe even
change the data i refers to!) the compiler has no way to optimize away
that step.
For that reason it's bad practice to modify the termination condition
([myArray count] in this case), or the increment condition (i++), from
within the loop.
It is still usually bad practice to do so, since it will probably lead
to convoluted code, but it can be done, and sometimes it should be done!
It is possible that some non-standard C compilers chose to override
this rule, but I haven't used one that did...
/ Rgds, David
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.