用程序删除工程中多余的图片

  最近无意中发现工程中有许多没有用到的图片,这些图片导致了工程的体积庞大,因此想将这些没有用到的图片找出来并将其删除。开始是通过人肉手动删除,删除花费了很长的时间,但这样做能够确保准确无误。后来想换一种方式删除图片,这种方式就是写个程序删除多余的图片。下面谈一谈整体思路。

  首先,将工程中的所有文件包括文件夹下的文件全部找出来,用一个数组保存这些路径。

  其次,通过Assets(我一般将图片存放在这个文件中)找出所有的图片,并将这些图片的地址保存起来。

  然后,将所有的.m文件找出并且找出所有的图片。在寻找图片的时候,我发现了一个问题,一般添加图片的方法是通过imageNamed:@"",但是有时候我们会通过变量添加图片,这时候这种方式就不能够找到所有的图片。但目前对我而言只能找到通过这种方式使用的图片名,以后有机会我将完善这个程序,争取能够找出所有使用的图片。

  最后,比较两个存放图片名的数组,找出没有使用的图片名。

  下面是源码,有需要的可以看看。

 1 #import "LMFFindAllFile.h"
 2 
 3 @implementation LMFFindAllFile
 4 #pragma mark --返回所有的文件列表
 5 + (NSArray *)findAllFileWithFileName:(NSString *)fileName
 6 {
 7     NSArray *fileNameListArray;
 8     NSFileManager *fileManager = [NSFileManager defaultManager];
 9     //判断文件是否存在
10     if ([fileManager fileExistsAtPath:fileName])
11     {
12         NSError *error = nil;
13         fileNameListArray = [fileManager subpathsOfDirectoryAtPath:fileName error:&error];
14     }
15     return fileNameListArray;
16 }
17 @end
 1 #import "LMFFindAllPicture.h"
 2 
 3 @implementation LMFFindAllPicture
 4 #pragma mark --找出所有的图片的路径并将其保存在一个数组中
 5 + (NSArray *)findAllPicture:(NSArray *)fileNameList
 6 {
 7     NSMutableArray *fileNameArray = [NSMutableArray array];
 8     NSMutableArray *filePathArray = [NSMutableArray array];
 9     NSMutableArray *array = [NSMutableArray array];
10     for (NSString *str in fileNameList)
11     {
12         if ([str containsString:@"ailian"])
13         {
14             NSArray *smallArray = [str componentsSeparatedByString:@"/"];
15             if ([smallArray count] >= 3)
16             {
17                 NSString *temp = [smallArray objectAtIndex:1];
18                 if ([temp isEqualToString:@"Assets.xcassets"])
19                 {
20                     NSString *subStr = [smallArray objectAtIndex:2];
21                     NSRange range = [subStr rangeOfString:@"."];
22                     if (range.location != NSNotFound)
23                     {
24                         NSString *fileName = [subStr substringToIndex:range.location];
25                         if ([fileNameArray count])
26                         {
27                             if (![fileNameArray containsObject:fileName])
28                             {
29                                 [fileNameArray addObject:fileName];
30                                 [filePathArray addObject:str];
31                             }
32                         }
33                         else
34                         {
35                             [fileNameArray addObject:fileName];
36                             [filePathArray addObject:str];
37                         }
38                     }
39                 }
40             }
41         }
42     }
43     //第一个数组保存的是图片名
44     //第二个数组保存的是图片的完整路径
45     [array addObject:fileNameArray];
46     [array addObject:filePathArray];
47     return array;
48 }
49 @end
 1 #import "LMFFindAllUsePicture.h"
 2 
 3 @implementation LMFFindAllUsePicture
 4 
 5 #pragma mark --找出所有的.m文件
 6 + (NSArray *)findAllFile:(NSArray *)fileNameList
 7 {
 8     NSMutableArray *array = [NSMutableArray array];
 9     for (NSString *str in fileNameList)
10     {
11         NSInteger length = str.length;
12         if ([str characterAtIndex:length-1] == 'm' && [str characterAtIndex:length-2] == '.')
13         {
14             [array addObject:str];
15         }
16     }
17     return array;
18 }
19 
20 #pragma mark --遍历所有的.m文件找到所有使用的图片
21 + (NSArray *)findAllPicture:(NSArray *)fileNameList WithDirectorPath:(NSString *)directorPath
22 {
23     NSFileManager *fileManager = [NSFileManager defaultManager];
24     NSMutableArray *pictureArray = [NSMutableArray array];
25     for (NSString *temp in fileNameList)
26     {
27         NSString *filePath = [directorPath stringByAppendingPathComponent:temp];
28     
29         if ([fileManager fileExistsAtPath:filePath])
30         {
31             NSData *data = [fileManager contentsAtPath:filePath];
32             NSString *contentStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
33             //对字符串进行解析 image:@" "  imageNamed:@" "
34             NSMutableString *contentMutableStr = [NSMutableString stringWithString:contentStr];
35             NSArray *subString = @[@"image:@\"", @"imageNamed:@\""];
36             for (NSString *sub in subString)
37             {
38                 for (NSString *pictureName in [self findPictureWithFileString:contentMutableStr andSubString:sub])
39                 {
40                     if (![pictureArray containsObject:pictureName])
41                     {
42                         [pictureArray addObject:pictureName];
43                     }
44                 }
45             }
46         }
47         else
48         {
49             NSLog(@"文件不存在");
50         }
51     }
52     return pictureArray;
53 }
54 
55 + (NSArray *)findPictureWithFileString:(NSMutableString *)fileString andSubString:(NSString *)subString
56 {
57     NSMutableArray *array = [NSMutableArray array];
58     BOOL flag = YES;
59     while (flag)
60     {
61         NSString *pictureName;
62         NSRange range = [fileString rangeOfString:subString];
63         if (range.location != NSNotFound)
64         {
65             //将location之前的字符删除
66             [fileString deleteCharactersInRange:NSMakeRange(0, range.location+subString.length)];
67             NSRange range1 = [fileString rangeOfString:@"\""];
68             if (range1.location != NSNotFound)
69             {
70                 pictureName = [fileString substringToIndex:range1.location];
71                 [fileString deleteCharactersInRange:NSMakeRange(0, range1.location)];
72                 if (![array containsObject:pictureName])
73                 {
74                     [array addObject:pictureName];
75                 }
76             }
77         }
78         else
79         {
80             flag = NO;
81         }
82     }
83     return array;
84 }
85 
86 @end
 1 #import "LMFDeleteAllNoUsePicture.h"
 2 
 3 @implementation LMFDeleteAllNoUsePicture
 4 + (NSArray *)findPictureNotUseWithAllPicture:(NSArray *)allPictureArray andUsePicture:(NSArray *)usePicture
 5 {
 6     NSMutableArray *array = [NSMutableArray array];
 7     for (NSString *pictureName in allPictureArray)
 8     {
 9         if (![usePicture containsObject:pictureName])
10         {
11             if (![array containsObject:pictureName])
12             {
13                 [array addObject:pictureName];
14             }
15         }
16     }
17     return array;
18 }
19 @end
posted @ 2016-06-13 14:57  照顾一下  阅读(463)  评论(0编辑  收藏  举报