NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
Here, language
不需要释放,因为objectAtIndex:
自动为您释放它。按照惯例,如果您拥有一个对象,那么您就拥有该对象alloc
ed, new
ed, or copy
编辑它,否则你就不会。
self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:backgroundImageName]];
在这里,UIColor
对象确实需要被释放(因为你alloc
ed it).
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];