In one of my classes I have a derived property called items, it is basically like:
- (NSArray *)items
{
[self.unsortedSet.allValues sortedArrayUsingDescriptor:...];
}
then in some other place:
[self.items enumerateUsingBlock...{
// do something with item
}]
in this case, if self.items has X items, then does the enumeration block generate self.items X times? Or is it more safer to:
NSArray *sortedItems = self.items;
[sortedItems enumerateUsingBlock...{}]
No. Just once. This is for semantics and efficiency.
semantics depend on your implementation.