если у меня есть свойство
@property (nonatomic, retain) NSArray* myArray;
Могу ли я сделать? И если да, то почему это работает?
for (id object in self.myArray) ;
Или мне нужно сделать?
NSArray* r = self.myArray; for (id object in r) ;
Это работает, потому что self.myArray является синтаксическим сахаром для [self myArray], которое генерируется ключевым словом @synthesize. Так что на самом деле вы делаете:
for (id object in [self myArray])
И возвращаемое значение [self myArray] реализует протокол быстрого перечисления, поэтому синтаксис for..in может с ним работать.
Это проясняет ситуацию?
Да, вы можете использовать быстрое перечисление таким образом.Чтобы ответить на вопрос из ваших комментариев, я считаю, что протокол быстрого перечисления вызовет исключение, если вы измените свойство массива во время перечисления.
http://www.mikeash.com/pyblog/friday-qa-2010-04-16-implementing-fast-enumeration.html
Вы можете определенно пойти на for(id object in self.array)
for(id object in self.array)