注释过的反汇编代码:http://pan.baidu.com/share/link?shareid=3491166579&uk=537224442
伪代码(不精确,仅供参考):
NSString* _UICacheNameForImageAtPath(NSString *imageName,NSBundle *bundle); NSString* ProductSuffix(); UIImage* GetImageAtPath(NSString *imageFilePath,CGFloat scale);
NSMutableDictionary *gCacheNameToImageMap =nil; NSMutableDictionary *gImageToCacheNameMap =nil; BOOL __prefer2xImages = NO;
UIImage *_UIImageAtPath(NSString *imageFileName,NSBundle *mainBundle, BOOL shouldForce1xScale) { // imageFileName = @"Default.png" if ([imageFileName length] == 0) return nil;
// bundleIdentifier_imageFileName NSString *cacheNameOfImage =_UICacheNameForImageAtPath(imageFileName, mainBundle); UIImage *resultImage = nil; if (gCacheNameToImageMap !=nil) { resultImage = [gCacheNameToImageMapobjectForKey:cacheNameOfImage]; if (resultImage != nil) { if (![resultImage _isCached]) { [resultImage retain]; }
[resultImage _setCached:YES];
return resultImage; } } else { gCacheNameToImageMap = [NSMutableDictionarydictionary]; gImageToCacheNameMap = [NSMutableDictionarydictionary]; }
BOOL force1xScale = NO; if (__prefer2xImages) { force1xScale = shouldForce1xScale; }
NSString *imageExt = [imageFileNamepathExtension]; if ([imageExt length] == 0) { imageExt = @"png"; }
NSString *bundlePath = nil; if (mainBundle != nil) { bundlePath = [mainBundle bundlePath]; }
NSString *productSuffix = ProductSuffix();// ~iphone, ~ipad NSString *imageNameWithoutSuffix = [imageFileNamestringByReplacingOccurrencesOfString:productSuffixwithString:@""];
// Default NSString *imageNameWithoutSuffixAndExt = [imageNameWithoutSuffixstringByDeletingPathExtension]; // Default~iphone NSString *imageNameWithSuffix = [imageNameWithoutSuffixAndExtstringByAppendingString:productSuffix]; // Default@1x NSString *imageName1x = [imageNameWithoutSuffixAndExtstringByAppendingString:@"@1x"]; // Default@1x~iphone NSString *imageName1xWithSuffix = [imageName1xstringByAppendingString:productSuffix]; // Default_1only_ NSString *imageName_1only_ = [imageNameWithoutSuffixAndExtstringByAppendingString:@"_1only_"]; // Default_1only_~ipnone NSString *imageName_1only_WithSuffix = [imageName_1only_stringByAppendingString:productSuffix];
// Default@2x NSString *imageName2x = [imageNameWithoutSuffixAndExtstringByAppendingString:@"@2x"]; // Default@2x~iphone NSString *imageName2xWithSuffix = [imageName2xstringByAppendingString:productSuffix]; // Default_2only_@2x NSString *imageName_2only_2x = [imageNameWithoutSuffixAndExtstringByAppendingString:@"_2only_@2x"]; // Default_2only_@2x~iphone NSString *imageName_2only_2xWithSuffix = [imageName_2only_2xstringByAppendingString:productSuffix];
NSString *targetFileName =nil; NSString *targetFilePath =nil; if (!force1xScale) { // Default@2x~iphone.png targetFileName = [imageName2xWithSuffix stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,2.0f);
// Default_2only_@2x~iphone.png if (resultImage == nil) { targetFileName = [imageName_2only_2xWithSuffix stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,2.0f); }
if (resultImage == nil) { targetFileName = [imageName2x stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,2.0f); }
if (resultImage == nil) { targetFileName = [imageName_2only_2x stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,2.0f); } }
if (resultImage == nil) { // Default~iphone.png targetFileName = [imageNameWithSuffix stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,1.0f);
// Default.png if (resultImage == nil) { targetFileName = [imageNameWithoutSuffixAndExt stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
// Default@1x~iphone.png if (resultImage == nil) { targetFileName = [imageName1xWithSuffix stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
// Default_1only_~ipnone.png if (resultImage == nil) { targetFileName = [imageName_1only_WithSuffix stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
if (resultImage == nil) { targetFileName = [imageName1x stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
// Default_1only.png if (resultImage == nil) { targetFileName = [imageName_1only_ stringByAppendingPathExtension:imageExt]; targetFilePath = [bundlePath stringByAppendingPathComponent:targetFileName]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
// Default~iphone if (resultImage == nil) { targetFilePath = [bundlePath stringByAppendingPathComponent:imageNameWithSuffix]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
// Default if (resultImage == nil) { targetFilePath = [bundlePath stringByAppendingPathComponent:imageNameWithoutSuffixAndExt]; resultImage = GetImageAtPath(targetFilePath,1.0f); } }
if (resultImage == nil) { if (!force1xScale) { targetFilePath = [mainBundle pathForResource:imageName2x ofType:imageExt]; resultImage = GetImageAtPath(targetFilePath,2.0f);
if (resultImage ==nil) { targetFilePath = [mainBundle pathForResource:imageName_2only_2x ofType:imageExt]; resultImage = GetImageAtPath(targetFilePath,2.0f); } }
// Default.png if (resultImage == nil) { targetFilePath = [mainBundle pathForResource:imageNameWithoutSuffixAndExt ofType:imageExt]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
if (resultImage == nil) { targetFilePath = [mainBundle pathForResource:imageName1x ofType:imageExt]; resultImage = GetImageAtPath(targetFilePath,1.0f); }
// Default_1only_.png if (resultImage == nil) { targetFilePath = [mainBundle pathForResource:imageName_1only_ ofType:imageExt]; resultImage = GetImageAtPath(targetFilePath,1.0f); } }
if (resultImage != nil) { [gCacheNameToImageMap setValue:resultImage forKey:cacheNameOfImage]; [gImageToCacheNameMap setValue:cacheNameOfImage forKey:resultImage]; [resultImage _setNamed:YES]; [resultImage _setCached:YES]; }
return resultImage; } |