Die Funktion bei Ich suche nach:Zuweisen von Werten zu Instanzvariablen in 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;
}
Warum ist ein NSDictionary zugeordnet, dann zugewiesen zu einem Zeiger * Wörterbuch genannt, und dann auf die Instanzvariable stateZips zugewiesen? Warum sollte es nicht zugewiesen und der Instanzvariablen direkt zugewiesen werden, um Speicher für das Erstellen und Freigeben eines anderen NSDictionary zu sparen? Die gleiche Methode wird immer gefolgt, auch später in dieser Funktion mit der NSArray ...
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
self.statesZips = dictionary;
[dictionary release];
Auch stellt diese Sortierung die Schlüssel aus einer Hash-Tabelle (Wörterbuch) in alphabetischer Reihenfolge. Ich bin mir nicht sicher, ob ich diese Zeile verstehen:
NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];
Ich denke eigentlich, dass die Semantik beibehalten/zuweisen der statesZips-Eigenschaft ist irrelevant. Der Code weist ein Objekt zu und muss es freigeben, * unabhängig * von der Semantik von statesZips, es sei denn, es wird in einer Umgebung mit Garbage Collection ausgeführt. –
@Barry Wark: Nun, nein. Die Semantik von StatesZips ist sehr relevant. Wenn diese Methode das Dictionary nicht beibehalten oder kopieren würde, würde der Zugriff auf statesZip nach Zeile 7 zu undefiniertem Verhalten führen (wahrscheinlich ein segfault). – hop
Convenience-Funktionen wie initWithContentsOfFile sind automatisch freigegeben. –