• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: 3 obj-c/cocoa beginner q's
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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.

References: 
 >Re: 3 obj-c/cocoa beginner q's (From: Steve Bird <email@hidden>)

  • Prev by Date: RE: String subtraction
  • Next by Date: Strange Message During Drag/Drop of Colour
  • Previous by thread: Re: 3 obj-c/cocoa beginner q's
  • Next by thread: Re: 3 obj-c/cocoa beginner q's
  • Index(es):
    • Date
    • Thread