<p>I know that if you have a loop that modifies the count of the items in the loop, using the NSEnumerator on a set is the best way to make sure your code blows up, however I would like to understand the performance tradeoffs between the NSEnumerator class and just an old school for loop</p>

They are very similar. With Objective-C 2.0 most enumerations now default to
```
NSFastEnumeration
```
which creates a buffer of the addresses to each object in the collection that it can then deliver. The one step that you save over the classic for loop is not having to call
```
objectAtIndex:i
```
each time inside the loop. The internals of the collection you are enumerating implement fast enumeration with out calling
```
objectAtIndex:i method
```
.
The buffer is part of the reason that you can't mutate a collection as you enumerate, the address of the objects will change and the buffer that was built will no longer match.
As a bonus the format in 2.0 looks as nice as the classic for loop:
```
```
for ( Type newVariable in expression ) { 
    stmts 
}
```
```
Read the following documentaion to go deeper:
NSFastEnumeration Protocol Reference