Функции Я смотрю на:Присвоение значений переменным экземпляра в Objective C
-(void)viewDidLoad {
NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath = [bundle pathForResource:@"statedictionary" ofType:@"plist"];
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
self.statesZips = dictionary;
[dictionary release];
NSArray *components = [self.stateZips allKeys];
NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];
self.States = sorted;
NSString *selectedState = [self.states objectAtIndex:0];
NSArray *array = [stateZips objectForKey: selectedState];
self.zips = array;
}
Почему NSDictionary выделена, то присвоенного указатель называется * словарь, а затем присвоенного экземпляр переменной stateZips? Почему бы не выделить его и присвоить его непосредственно переменной экземпляра и сохранить память о создании и выпуске другого NSDictionary? Та же методология всегда следует, в том числе и в конце этой функции с NSArray ...
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
self.statesZips = dictionary;
[dictionary release];
Кроме того, эта сортировка ставит ключи из хэш-таблицы (словарь) в алфавитном порядке. Я не уверен, я понимаю эту строку:
NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];
Я действительно считаю, что семантика сохранения/присваивания свойства statesZips не имеет значения. Код выделяет объект, поэтому ему необходимо его освободить, * независимо от * семантики состояний Zips, если только она не работает в среде, собранной для мусора. –
@ Barry Wark: ну, нет. семантика состояний Zips очень важна. если этот метод не сохранит словарь или не скопирует его, доступ к состояниям Zip после строки 7 приведет к неопределенному поведению (вероятно, segfault). – hop
Функции удобства, такие как initWithContentsOfFile, автореализовываются. –