- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 
                        - (void)addFavourite:(NSString *)path
{    
    NSMutableArray *favourites;
    
    // Create an array if it’s not already there
    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"Favourites"]) {
        favourites = [[[NSMutableArray alloc] init] autorelease];
    } else {
        favourites = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"Favourites"]];
    }
    // Check if already exists
    NSUInteger idx = [favourites indexOfObjectPassingTest: ^BOOL (id obj, NSUInteger idx, BOOL *stop) {
        return [obj isEqualToString:path];
    }];
    if (idx == NSNotFound) {
        [favourites addObject:path];
    }
    
    // ...
}
                                 
        
            Мало того, что работа с "избранным" раскидана по всему приложению (часть кода в AppDelegate, часть в тулбаре(!), часть во вьюшке, где рисуется таблица избранных), так ещё и изобретаем свои алгоритмы поиска.
        
        
А в Обж-Си есть макросы? Ну, чтобы, например, не писать alloc] init] autorelease] а задефайнить это где-нибудь один раз.
Во-первых, есть клёвая IDE AppCode от JetBrains, чтобы не писать это руками.
Во-вторых, http://stackoverflow.com/questions/1139884/how-to-create-a-macro-for-object-instantiation-in-objective-c-ansi-c
В-третьих, доля старых iOS уже мала, и можно задуматься об использовании ARC, так что никаких autorelease, retain, release тебе больше не нужно (если я правильно представляю ARC)
ЗЫ. Лучшие традиции JetBrain это как лучшие туфли советской кожевенно-обувной промышленности.
Сейчас о доле устройств с iOS <= 4.3, пользователи которых ставят приложения, можно говорить как о пренебрежимо малой (весной было менее трех процентов уже).
Кстати, и дизайн давно делаем только под Ретину.