當然,只管理自己打開圖像。例如,我想要像「imageNamed」這樣的方法,但不希望imageNamed所做的緩存,所以我寫了自己的。這不是你想要的功能,但它說明了這個概念,你可以制定自己的規則。執行自己的實現並不是一項巨大的工作。如果你想想要 imageNamed的緩存,只需使用imageNamed打開你最終決定使用的圖像。
// An "uncached" version of -imageNamed.
// It looks for the scale-and-idiom suffixes @2x, ~ipad, and @2x~ipad
// and preferentially loads the specific version if it is available.
+ (UIImage *)imageNamedUncached:(NSString *)name {
NSString *tryName;
NSString *nonRetinaiPadTryName = @"";
NSArray *parts = [name componentsSeparatedByString:@"."];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if ([[UIScreen mainScreen] scale] == 1.0) {
// non-retina
tryName = [parts[0] stringByAppendingString:@"~ipad"];
tryName = [tryName stringByAppendingString:@"."];
tryName = [tryName stringByAppendingString:parts[1]];
} else {
// retina
tryName = [parts[0] stringByAppendingString:@"@2x~ipad"];
tryName = [tryName stringByAppendingString:@"."];
tryName = [tryName stringByAppendingString:parts[1]];
nonRetinaiPadTryName = [parts[0] stringByAppendingString:@"~ipad"];
nonRetinaiPadTryName = [nonRetinaiPadTryName stringByAppendingString:@"."];
nonRetinaiPadTryName = [nonRetinaiPadTryName stringByAppendingString:parts[1]];
}
} else {
// iPhone
if ([[UIScreen mainScreen] scale] == 1.0) {
// non-retina
tryName = name;
} else {
// retina
tryName = [parts[0] stringByAppendingString:@"@2x"];
tryName = [tryName stringByAppendingString:@"."];
tryName = [tryName stringByAppendingString:parts[1]]; }
}
NSString *path = [[NSBundle mainBundle] pathForResource:tryName ofType:nil];
//NSLog(@"For tryName %@ I get path %@",tryName, path);
if (! path) {
// If this is a retina iPad we made a non-retina try name -- so check that
if (! [nonRetinaiPadTryName isEqualToString: @""]) {
path = [[NSBundle mainBundle] pathForResource:nonRetinaiPadTryName ofType:nil];
//NSLog(@"For non-retina ipad try name %@ I get path %@",nonRetinaiPadTryName, path);
}
if (! path) {
// Try the unmodified name
path = [[NSBundle mainBundle] pathForResource:name ofType:nil];
//NSLog(@"For base name %@ I get path %@",name, path);
}
}
UIImage *pathImage = [UIImage imageWithContentsOfFile:path];
return pathImage;
}
那麼我的第一個建議是修復內存泄漏。您還可以爲iphone專門添加圖片:'image @ 2x〜iphone.png'。 – rckoenes
我不想添加圖片,因爲我的應用程序如此之大 – CrazyDev