Почему или почему бы не назвать объект «я». префикс? - PullRequest
0 голосов
/ 19 сентября 2010
@interface{
   NSArray *array;
}
@property (nonatomic, retain) NSArray *array;
@end

@implementation
@synthesize array;
   self.array = [[NSArray alloc] init];
   array = [[NSArray alloc] init];

[self.array objectAtIndex:2]; [array objectAtIndex:2];
@end

Есть ли разница между ними?Почему я должен использовать один над другим?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2010

self.array = foo является сокращением для [self setArray:foo] (т. Е. Вы получаете доступ к методам синтезированных свойств), в то время как просто array = foo непосредственно обращается к переменной экземпляра.

В этом случае вы могли бы создать утечку памятис self.array = [[NSArray alloc] init];, так как свойство сохранит его, и поэтому счетчик ссылок будет 2 вместо 1. Поэтому лучше было бы: self.array = [NSArray array];.

Какой из них выбрать - почти дело вкуса, но использованиесвойства дают вам несколько преимуществ, таких как автоматическая поддержка кодирования ключ-значение.Это также является преимуществом, если вы когда-нибудь захотите реализовать setArray: самостоятельно, чтобы он мог выполнять дополнительные действия при назначении массива (например, перезагрузить UITableView).С другой стороны, это немного медленнее, поскольку это дополнительный вызов метода (имеет значение, только если он вызывается в цикле много ).Но почти для всех приложений лучше быть правильным, чем как можно быстрее.Использование свойств может упростить вам управление памятью.

3 голосов
/ 19 сентября 2010

Свойство «массив» объявляется как сохраняемое при присваивании (сохранение в скобках после @property означает это).Поскольку он имеет то же имя, что и переменная экземпляра «array», он использует эту переменную экземпляра в качестве резервного хранилища.

Эффективный вызов self.array = [[NSArray alloc] init]; - это то же самое, что и вызов array = [[[NSArray alloc] init] retain];

Когда выприсваивать переменной экземпляра напрямую, без использования свойства, никакие действия не предпринимаются, поэтому массив просто указывает на новый экземпляр NSArray, не сохраняя его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...