Могу ли я сделать быстрое перечисление напрямую через свойство? - PullRequest
0 голосов
/ 10 февраля 2011

если у меня есть свойство

@property (nonatomic, retain) NSArray* myArray;

Могу ли я сделать? И если да, то почему это работает?

for (id object in self.myArray)
    ;

Или мне нужно сделать?

NSArray* r = self.myArray;
for (id object in r)
    ;

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Это работает, потому что self.myArray является синтаксическим сахаром для [self myArray], которое генерируется ключевым словом @synthesize. Так что на самом деле вы делаете:

for (id object in [self myArray])

И возвращаемое значение [self myArray] реализует протокол быстрого перечисления, поэтому синтаксис for..in может с ним работать.

Это проясняет ситуацию?

1 голос
/ 10 февраля 2011

Да, вы можете использовать быстрое перечисление таким образом.Чтобы ответить на вопрос из ваших комментариев, я считаю, что протокол быстрого перечисления вызовет исключение, если вы измените свойство массива во время перечисления.

http://www.mikeash.com/pyblog/friday-qa-2010-04-16-implementing-fast-enumeration.html

0 голосов
/ 10 февраля 2011

Вы можете определенно пойти на for(id object in self.array)

...