Ваш код выглядит правильно, и вы правы, считая, что есть лучший способ. Вы можете уменьшить количество временных переменных и использовать (не изменяемый) NSDictionary
вместо NSMutableDictionary
, выбрав инициализатор для задачи:
NSDictionary *bookmarks = [NSDictionary dictionaryWithObjectsAndKeys:
[NSURL urlWithString:@"http://www.stanford.edu"], @"Stanford University",
[NSURL urlWithString:@"http://www.apple.com"], @"Apple",
//...etc...,
nil
];
Обратите внимание, что -[NSDictionary dictionaryWithObjectsAndKeys:]
, как и все фабричные методы Какао, создает экземпляр autoreleased
. Если вы намереваетесь сохранить право собственности на словарь после текущей области, вам следует retain
возвращенный экземпляр или использовать alloc/initWithObjectsAndKeys:
.
Если для назначения (как ни странно) требуется изменяемый словарь, вы, конечно, можете использовать +[NSMutableDictionary dictionaryWithObjectsAndKeys:]
.
Я предпочитаю более явную форму поиска, которую вы используете. Некоторые могут подумать, что (если вы на 10.6), лучше использовать более функциональную форму:
[bookmarks enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
if([key hasPrefix:testString]) { NSLog(@"Key: %@ URL: %@", key, value); }
}];