code随手记

Practice from here


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
close

iOS开发小技巧

发表于 2016-03-15   |   分类于 iOS技术   |     |   阅读次数

iOS开发的一些奇巧淫技,
“奇巧淫技”并非是一些稀奇古怪的技术要点,也不是什么所谓的黑科学,只是一些平时可能会用到但有些又并不是很容易查询得到的小tips.

如何查看真机沙盒文件

一:安装iFunBox或IExployer

二:设置

在xcode的上部导航栏里,选择window -> Devices,找到目标app,双击选中项目,

阅读全文 »

Xcode多工程联编及工程依赖

发表于 2016-03-12   |   分类于 iOS配置   |     |   阅读次数

在了解xcode构建原则之前,需要熟悉workspace相关的概念,即workspace,project和target。

一:target

target指定了构建的product,包含将workspace或project中的一组文件构建成product的指令。单个target定义一个product,它将输入(源文件和处理这些源文件的指令(包含所设定的构建settings和phases))组织进构建系统中。project和target是一对多的关系。

target会继承project的build settings,但可以以target为粒度设置build settings,且Xcode中当前一次只会有一个有效target,此有效target在xcode scheme中标识。

若target A依赖target B的输出来构建,则A依赖B,当它们存在于一个xcode workspace中的时候,Xcode会发现此依赖关系并按顺序构建。这种依赖称为隐性依赖,当然也可以在build settings中声明显性依赖,也可将隐性依赖的两个target显性声明为没有依赖。比如可能在同一个workspace中同时构建一个库并构建一个依赖这个库的应用,则xcode会选择先构建库。但如果应用想链接库的某个特定版本,则可以显性声明这个依赖关系,此时隐性依赖即被覆盖了。

阅读全文 »

iOS缓存机制-非结构化存储

发表于 2016-03-12   |   分类于 iOS技术   |     |   阅读次数

对于一个优秀的app来说,缓存机制必不可少。图片,视频,音频等等各种类型的文件,怎么样去更好的管理这些数据,这对于我们开发者以及用户都是息息相关的。闲话不多说,先来看看几个github开源中牛逼的几个缓存框架。

它们的使用方式都很类似,都是通过键值对(key-value)的形式进行存取,跟NSUserDefaults用法类似。

以下排名按照性能由低到高:

1.EGOCache

只提供磁盘缓存,没有内存缓存,一个比较简易的缓存框架。

2.TMCache

最初由 Tumblr 开发,但现在已经不再维护了。TMMemoryCache 实现有很多 NSCache 并没有提供的功能,比如数量限制、总容量限制、存活时间限制、内存警告或应用退到后台时清空缓存等。TMMemoryCache 在设计时,主要目标是线程安全,它把所有读写操作都放到了同一个 concurrent queue 中,然后用 dispatch_barrier_async 来保证任务能顺序执行。它错误的用了大量异步 block 回调来实现存取功能,以至于产生了很大的性能和死锁问题。它有磁盘缓存和内存缓存两部分组成,个人感觉一般好点的缓存库都会由磁盘缓存和内存缓存两部分组成,在我们第一次存储一个文件到磁盘的时候,缓存库会帮我们复制一份到内存缓存中,可以让我们在下次使用该文件的时候可以更快的找到。我上家公司就是用的这个缓存框架,挺好用的,也没出什么问题。

3.PINCache

是 Tumblr 宣布不在维护 TMCache 后,由 Pinterest 维护和改进的一个内存缓存。它的功能和接口基本和 TMCache 一样,但修复了性能和死锁的问题。它同样也用 dispatch_semaphore 来保证线程安全,但去掉了dispatch_barrier_async,避免了线程切换带来的巨大开销,也避免了可能的死锁。相当于是TMCache的优化版,而且一直有更新。

阅读全文 »

一分钟学会环形进度条

发表于 2016-02-27   |   分类于 iOS技术   |     |   阅读次数

有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现。
先看一下这篇博客,博客地址:http://www.brighttj.com/ios/ios-implement-loop-progress.html
这篇博客写的不错,不过看上去还是略微复杂了,我自己根据自己的思路整理了一下,当然目的是为了更加简洁易懂。

一:先制作一个不带颜色渐变的进度条

自定义一个cycleView,在.m 中实现drawRect方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (void)drawRect:(CGRect)rect {

CGContextRef ctx = UIGraphicsGetCurrentContext();//获取上下文

CGPoint center = CGPointMake(100, 100); //设置圆心位置
CGFloat radius = 90; //设置半径
CGFloat startA = - M_PI_2; //圆起点位置
CGFloat endA = -M_PI_2 + M_PI * 2 * _progress; //圆终点位置

UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];

CGContextSetLineWidth(ctx, 10); //设置线条宽度
[[UIColor blueColor] setStroke]; //设置描边颜色

CGContextAddPath(ctx, path.CGPath); //把路径添加到上下文

CGContextStrokePath(ctx); //渲染

}
阅读全文 »
1…101112
夜千寻墨

夜千寻墨

扫码关注微信公众号,及时获取文章更新

48 日志
10 分类
77 标签
RSS
GitHub Weibo 简书 instagram
© 2020 夜千寻墨
powered by Hexo
theme - Next
本站访客数人次 总访问量次