图片资源过多 视频资源过多 导致的编译 速度 过慢问题
我的博客地址欢迎阅读和指正:
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