Никто, похоже, не учел тот факт, что линия
self.statesZips = dictionary;
не является прямым присваиванием переменной экземпляра. stateZips
- это свойство, поэтому строка кода вызывает метод setStateZips:
. Этот метод сохраняет или копирует словарь, поэтому, если метод viewDidLoad
не намеревается использовать его снова для каких-либо целей, он больше не нужен. Это делает все нормально, чтобы release
это.
Предыдущая строка:
[[NSDictionary alloc] initWithContentsOfFile:plistPath];
выделяет объект. Это делает вашу ответственность перед release
, если она вам больше не нужна. После присвоения его свойству statesZips
оно больше не требуется, поэтому оно освобождается, и вам больше не следует использовать dictionary
. Вы заметите, что более поздний код относится только к self.stateZips
, а не dictionary
.
В случае NSArray
позже в методе, viewDidLoad
не выделяет объект, поэтому метод не отвечает за вызов release
для него. Практическое правило гласит, что если вы alloc
это, вы несете ответственность за обеспечение его освобождения. В противном случае это не ваша проблема.
При сортировке массива используется метод sortedArrayUsingSelector:
. Селектор определяет метод в Objective-C. И @selector
- это буквальный синтаксис для селекторов (вроде как @""
- это буквальный синтаксис для NSString
объектов). Итак, что говорит этот код: «дайте мне массив, в котором отсортированы объекты в components
, и используйте метод compare:
для сравнения каждого объекта при выполнении сортировки. Когда он сортирует массив, он вызовет compare:
на объектах в массиве, чтобы определить, как их упорядочить.