self.array = foo
является сокращением для [self setArray:foo]
(т. Е. Вы получаете доступ к методам синтезированных свойств), а только array = foo
непосредственно обращается к переменной экземпляра.
В этом случае вы создадите утечку памяти с self.array = [[NSArray alloc] init];
, так как свойство сохранит ее, и счетчик ссылок будет таким образом равным 2 вместо 1. Так что лучше было бы: self.array = [NSArray array];
.
Какой из них предпочтительнее - это почти вопрос вкуса, но использование свойств дает вам несколько преимуществ, таких как автоматическая поддержка кодирования ключевых значений. Это также является преимуществом, если вы когда-нибудь захотите реализовать setArray:
, чтобы он мог делать дополнительные вещи, когда назначается массив (например, перезагрузка UITableView). С другой стороны, это немного медленнее, поскольку это дополнительный вызов метода (имеет значение только при вызове в цикле много). Но практически для всех приложений лучше быть как можно быстрее. Использование свойств позволяет упростить управление памятью.
Возможный дубликат [Когда использовать свойства self on class?] (Http://stackoverflow.com/questions/867001/when-to-use-self-on-class-properties) – Chuck