NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
Здесь language
не нужно выпускать, потому что objectAtIndex:
автоматически выпускает его для вас.По соглашению, у вас есть объект, если вы alloc
ed, new
ed или copy
ed его, в противном случае вы этого не сделаете.
self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:backgroundImageName]];
Здесь объект UIColor
нужно освободить (потому что вы alloc
редактировали его).
NSString *backgroundImageName = [[NSString alloc] init];
backgroundImageName = [NSString stringWithFormat:@"background-%@.png",language];
Здесь строка, возвращаемая [[NSString alloc] init]
, должна быть освобождена (потому что вы alloc
редактировали ее).Однако следующая строка изменяет backgroundImageName
, указывая на новую автоматически освобожденную строку, теряя последнюю ссылку на исходную строку без ее освобождения (утечка памяти).backgroundImageName
не следует выпускать, поскольку он уже выпущен автоматически.
Вы можете избежать утечек, выпустив UIColor
и удалив неиспользованную строку.Например:
NSString *backgroundImageName = [NSString stringWithFormat:@"background-%@.png",language];
... и ...
UIColor* backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:backgroundImageName]];
self.view.backgroundColor = backgroundColor;
[backgroundColor release];