图片资源过多 视频资源过多 导致的编译 速度 过慢问题

我的博客地址欢迎阅读和指正:

http://www.cnblogs.com/yyxios/

https://github.com/iOSSinger

 

公司项目其实也不大,几千行代码,但是每次做个小小的改动,都要重新编译,轻则5,6分钟重则十几分钟,原因是里面需要显示3D效果,因此项目里面放了许多图片资源和视频资源,导致每次编译速度都很慢;

解决办法:

主要是针对序列帧图片,将序列帧图片放到桌面的某个自定义文件夹里(我用的是sources文件夹),序列帧图片的名字与它所在的文件夹名有关联如:gongyu_0001.png这张图片,就放到 /Users/用户名/desktop/sources/gongyu/ 这个文件夹里,项目中需要加载图片时,就根据图片名拼接出桌面的路径;同理可以将视频放到自定文件夹里;

在调试阶段下链接电脑本地资源,能看到效果,编译速度明显加快;

在发布阶段:直接把资源扔进去就行了,而让调试的代码失效;

具体做法如下:

#ifdef DEBUG
   
从本地读取资源,注意路径
   
#else

按照默认做法即可

#endif

注意事项:

加载图片时,不要用

[UIImage imageNamed:path];这个方法,这个方法会引起内存暴增(因为序列帧很多,这个方法会做缓存,到这内存暴增到2G+);

其他可能原因:

.h文件中不要过多引用.h文件,而是在.m中引用,尽量多使用@class

附上核心代码:

 1 @implementation NSString (changePath)
 2 - (NSString *)changedPath{
 3 
 4 #ifdef DEBUG
 5     
 6     
 7     //视频资源
 8     if([self hasSuffix:@"mp4"] ||
 9        [self hasSuffix:@"avi"] ||
10        [self hasSuffix:@"mpeg"]||
11        [self hasSuffix:@"mpg"] ){
12         NSString *sourcePath = @"/Users/yyx/Desktop/Sources";
13         return [sourcePath stringByAppendingPathComponent:@"self"];
14     }
15     
16     //图片资源
17     NSArray *imageNameArray = [self componentsSeparatedByString:@"_"];
18     if (imageNameArray.count < 2) {//图片名不合格
19         return  self;
20         
21     }else if(imageNameArray.count == 2){//图片名:gongyu_0001类型
22         NSString *sourcePath = @"/Users/yyx/Desktop/Sources";
23         NSString *dir = [NSString stringWithFormat:@"%@/%@",sourcePath,imageNameArray.firstObject];
24         NSString *path = [NSString stringWithFormat:@"%@/%@",dir,self];
25         NSLog(@"调试 - %@ \n %@",self,path);
26         return path;
27         
28     }else{//图片名:gongyu_hehe_0001类型 文件夹为gongyu_hehe
29         NSString *sourcePath = @"/Users/yyx/Desktop/Sources";
30         NSString *dir = [NSString stringWithFormat:@"%@/%@_%@",sourcePath,imageNameArray.firstObject,imageNameArray[1]];
31         NSString *path = [NSString stringWithFormat:@"%@/%@",dir,self];
32         NSLog(@"调试 - %@ \n %@",self,path);
33         return path;
34     }
35     
36 #else
37     NSLog(@"发布");
38     return  [[NSBundle mainBundle] pathForResource:self ofType:nil];
39 #endif
40 
41 }
42 @end

 

posted @ 2015-09-07 22:59  yang~  阅读(495)  评论(0编辑  收藏  举报