关于项目优化的一些小技巧

1.若项目能编译成功,但有错误提示时,可以用清理缓存的方式解决。

就是把/Users/用户名/Library/Developer/Xcode/DerivedData文件全部删除。
但要注意的是删除前要关闭项目,否则该问题仍存在。

2.利用NSData读取文件

NSData读取文件时分两种形式,通过网络读取和本地读取。二者不能混淆,否则会导致nil问题

//读取本地文件
NSData *dataTemp = [NSData dataWithContentsOfFile:@"/Volumes/IMG_992.png"];

//读取网络文件
NSUrl *url = [NSUrl URLWithString:@"http://baike.baidu.com/pic/%E7%BE%8E%E5%9B%BD/125486/0/377adab44aed2e73523e86b38501a18b86d6fa5e?fr=lemma&ct=single#aid=0&pic=377adab44aed2e73523e86b38501a18b86d6fa5e"];
NSData *dataTemp = [NSData dataWithContentsOfURL:url];

若读取本地文件时使用dataWithContentsOfURL,如

NSUrl *url = [NSUrl URLWithString:@"/Volumes/IMG_992.png"];
NSData *dataTemp = [NSData dataWithContentsOfURL:url];

那么dataTemp将会是nil,这二者不能混淆

3.图片优化的一个小技巧

就是获取图片时,尽量用imageWithContentsOfFile来代替[UIImage imageNamed:@""]

因为imageNamed读取图片时,会缓存在内存中,不容易被释放。在使用imageWithContentsOfFile时需注意两个问题
①.xcassets里的图片无法被imageWithContentsOfFile读取
②imageWithContentsOfFile读取图片需要加图片的扩展名,如png,jpg等

4.在xcode中debug时,若想po self.view.frame或po id类型数据时,会出现

那么此时就需要在终端输入三条指令使之能打印出来

1.  touch ~/.lldbinit
2.  echo display @import UIKit >> ~/.lldbinit
3.  echo target stop-hook add -o \"target stop-hook disable\" >> ~/.lldbinit

输完后若不出现任何提示,则表示操作成功。
此时重新开始项目即可,无需重启Xcode。成功后

5.使用quartz2d画图中带有create,copy,retain等方法创建出来的值都必须手动释放,否则在analyze时会报内存溢出问题。

手动释放有两种方法

CGPathRelease(path);
CFRelease(path);

CAShapeLayer *layer = [CAShapeLayer new];
UIBezierPath *path = [UIBezierPath new];

CGPathRef bound = CGPathCreateCopyByStrokingPath(layer.path, nil, layer.lineWidth, kCGLineCapButt, kCGLineJoinMiter, layer.miterLimit);
layer.bounds = CGPathGetBoundingBox(bound);

手动释放该值,必须有

CGPathRelease(bound);

或者使用

CFRelease(bound);
//CFRelease属于更底层的cocafoundation框架
时间: 2024-10-04 10:07:13

关于项目优化的一些小技巧的相关文章

前端网络、JavaScript优化以及开发小技巧

一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN缓存 通过构建工具Gulp,可以在开发的时候就将合并压缩的事情一起做掉. 之所以要做合并压缩是因为:HTTP 1.x不允许一个连接上的多个响应数据交错到达(多路复用),因而一个响应必须完全返回后,下一个响应才会开始传输. 也就是说即使客户端同时发送了两个请求,而且CSS资源先准备就绪,服务器也会先发

discuz优化10个小技巧

Discuz论坛是国内使用最多的论坛系统,现在最新版为X 3.4,X3.4 从 2018 年 1 月 1 日起只在官方 Git 发布,地址:https://gitee.com/ComsenzDiscuz/DiscuzX,说明已经开源了.discuz有那么多的粉丝,跟它完善的功能有很大关系,开箱即用,很多优化可以直接在后台设置,应对高并发/大数据量,那么discuz怎么优化呢?可以从以下几点来进行,跟ytkah一起来看看吧. 1.性能优化 首先想到的是内置的性能优化,在后台的 全局 - 性能优化

UITableView的性能优化10个小技巧

通常你会发现一个图片类的app会在一个imageView上做下面这些事情: 1  下载图片(主要的内容图片+用户头像图片)2  更新时间戳3  展示评论4  计算动态的cell的高度 Tip#1 学习怎么提升速度 1.打开你的项目并点击Product>Profile 2.在那儿选择Custom 3.找到添加按钮并且添加工具:Allocations,Time,Profile,Leaks 4.观察你的应用,以及他的表现. Tip#2 避免阻塞主线程 在这个例子中你会看到第一个图片相关的方法在数据下载

angularjs的一些优化小技巧

尽可能少调用 ng-repeat ng-repeat默认会创建很多监听器,所以在数据量很大的时候,这个非常消耗页面性能,我觉的只有在当需要经常更新数据列表的时候才需要用ng-repeat,要不然放那么多的监听器在那里也是浪费,这时候可以用ng自带的$interpolate服务来解析一个代码片段,类似于一个静态模板引擎,它的内部主要依赖ng核心解析服务$parse,然后把这些填充数据之后的代码片段直接赋给一个一次性的模型性就可以. 尽量在指令里写原生语法 虽然ng提供了很多的指令比如ng-show

.Net开发小技巧

.NET项目开发中的小技巧 1.不要频繁的创建对象...这个损失是巨大的...new太多了,后果比较严重. 2.打开数据库后要及时的关闭连接,如果你不能做到一个open后跟一个close,那也没关系,用Using满足你偷懒的欲望吧 3.别太迷信string str1 = "";和string.empty之间的差异,性能上和你想的完全不一样.放心大胆的使用""吧. 4.如果你的项目比较大,或者你的IIS服务器配置不太高,那么,我还是建议你多用存储过程,减少前端服务器的

iOS 开发中使用到的小技巧汇总

国庆即将来到,一个小项目也即将完成,把自己在项目中用的一些小技巧写出来,方便查找. 1,去掉分割线--动画设置透明度alpha //去掉tableView的分隔线: self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone; self.tableView.showsVerticalScrollIndicator=NO; 2. 解决cell分割线左边短20px的问题 -(void)viewDidLayoutSubviews{ i

近期开发项目中用到的编码小技巧汇总说明(二)

之前有总结发表过<近期开发项目中用到的编码小技巧汇总说明>,虽没有涉及什么高大上的东西,但都是一些很实用的平时大家可能用到的知识,今天继续分享一些小技巧,欢迎大家了解,不足之处,可以直接评论留言谢谢! 接上篇序号 6.解决当同一个类在不同的项目中(命名空间不同,但类的定义完全相同的情况)使用BinaryFormatter进行序列化后再反序列化时出现找不到程序集的问题或反序列化的结果为null 原代码:(DataSetSurrogate分别在API项目中,客户端项目中都存在,类定义一样但由于不在

125个提高网页可用性的优化小技巧(二)

125个提高网页可用性的优化小技巧(二) --安阳师范学院互联网+应用技术学院UI设计方向讲师 崔凯让常用功能和重要数据信息更接近用户预测用户的意图,让他们尽可能接近目标. △ 筛选出或跳至用户正在搜索的条目 △ 将用户常选项目列为默认选项△ 产品列表页上把重要数据信息展示出来很多时候用户需要像踩弹簧高跷杖一样,点击一个产品,查看信息,返回上一页,再反复操作以查看其他产品.这种设计的可用性差.应把重要信息直接放在主要页面,减少用户反复操作的次数.如果你怕这样页面会杂乱,也可以设计成鼠标悬停时显示

struts2学习笔记之六(Action访问servlet的API以及复制项目小技巧)

action和servlet分离使得action代码更加纯洁,与servlet的耦合性也降低了 但是有时候却不得不访问servlet API,比如把数据放到session,application里, 更甚至于添加cookie(response.addCookie()) strust2提供了两种方式访问servlet api 伪访问 借助于ActionContext类 Map<String ,Object > getApplication() 模拟访问http application Map&l