-
audioUnit
基本认识在AudioUnitHostingFundamentals这个官方文档里有几个不错的图:audioUnitScopes_2x.png对于通用的audioUnit,可以有1-2条输入输出流,输入和输出不一定相等,比如mixer,可以两个音频输入,混音合成一个音频流输出。每个element表示一个音频处理上下文(context), 也称为bus。每个element有输出和输出部分,称为scope,分别是input scope和Output scope。Global scope确定只有一...…
-
RunLoop
加载方式imageWithContentsOfFile:+图片路径([[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”]),不会缓存到内存,适合用于加载较大的不常用的图片降低内存消耗。imageNamed:+图片名,会缓存到内存且无法释放。imageWithData:+二进制data,不缓存,适合网络下载图像生成UIImage。然后将生成的UIImage赋值给UIImageView,CA捕捉到图层树的变化在下一个run ...…
-
RunLoop
日常的开发工作中,我们几乎很少注意RunLoop,因为我们基本上“用不到”RunLoop。包括我在内应该有很多人都不了解这个东西,只是听说过。最近有空查了不少资料终于把RunLoop运行原理搞清楚了。本文会对RunLoop的原理进行深入探讨,但是不涉及底层的实现。我们平时开发中的很多东西都和RunLoop相关,比如:AutoreleasePoolNSTimer消息通知perform函数网络请求dispatch调用block回调KVO触摸事件以及各种硬件传感器RunLoop机制贯穿整个App...…
-
tableview高度计算
UITableViewDynamicLayoutCacheHeight 是一个便捷的,高性能的自动计算使用 Autolayout 布局【Xib、StoryBoard、Masonry 、SnapKit、SDAutoLayout …】的 UITableViewCell 和 UITableViewHeaderFooterView 的高度,支持横竖屏,内部自动管理高度缓存,已兼容 Swift 。在 UITableView 获取高度的代理方法里实现如下代码,Block 中的代码和 - (UITabl...…
-
RxSwift
1.函数式编程是种编程范式,他是通过构建函数操作序列,然后对这些序列做出响应的编程方式,它结合了函数式编程以及响应式编程2.函数式编程的优点灵活高复用简洁易维护适应各种需求变化3.我们通过不同的构建函数,来创建所需要的数据序列。最后通过适当的方式来响应这个序列。这就是函数响应式编程。4.Observable是可监听序列,Observe是观察者,数据绑定(订阅,就是将可监听序列绑定到观察者上。5.RxSwift核心内容Observable - 产生事件Observer - 响应事件Opera...…
-
Swift - 区间运算符(... 和 ..<)
区间运算符可以用来表示两个操作数之间的范围集合。1,闭区间运算符:a…bfor iCount in 512...1024{//从512遍历到1024(包括1024)}2,半闭区间运算符:a..<bvar fruts = ["apple","orange","banana"]let iCount = fruts.countfor i in 0..<iCount{print("第\(i+1)个水果是\(fruts[i])")}3,倒序循环通过 reversed() 方法,我们可以将...…
-
使用arc4random()、arc4random_uniform()取得随机数
arc4random() 这个全局函数会生成10位数的随机整数(UInt32)。其生成的最大值是4294967295(2^32 - 1),最小值为0。1,下面是使用 arc4random 函数求一个 1~100 的随机数(包括1和100)1 | let temp = Int(arc4random()%100)+12,下面是使用 arc4random_uniform 函数求一个 1~100 的随机数(包括1和100) 1 let temp = Int(arc4...…
-
Swift - 基本数据类型,及常/变量声明
下面是 Swift 中基本的数据类型介绍说明:1,变量:使用var声明1 var str:String = “hangge.com”2,常量:使用let声明1 let count:Int = 323,整形:有符号整形:Int,Int8,Int16,Int32,Int64无符号整形:UInt,UInt8,UInt16,UInt32,UInt644,浮点型:Double:64位浮点数类型5,布尔型:Bool6,字符串:String(1)判断是否为空:isEmpty1 var str:Strin...…
-
CADisplayLink、NSTimer
使用CADisplayLink、NSTimer有什么注意点?CADisplayLink、NSTimer会造成循环引用,可以使用YYWeakProxy或者为CADisplayLink、NSTimer添加block方法解决循环引用BAD_ACCESS在什么情况下出现?访问了悬垂指针,比如对一个已经释放的对象执行了release、访问已经释放对象的成员变量或者发消息。 死循环…
-
循环引用 小结
循环引用循环引用的实质:多个对象相互之间有强引用,不能释放让系统回收。如何解决循环引用?1、避免产生循环引用,通常是将 strong 引用改为 weak 引用。 比如在修饰属性时用weak 在block内调用对象方法时,使用其弱引用,这里可以使用两个宏define WS(weakSelf) __weak __typeof(&self)weakSelf = self; // 弱引用define ST(strongSelf) __strong __typeof(&self)st...…