Cmb Blog

一生想做浪漫极客

浅谈 IM SDK 的设计

IM SDK

由于公司向社区化转型,所以对 IM 的需求开始加大了,IM SDK 开发迫在眉睫,以下就浅谈一下本人在写 IM SDK 时的一些心得和见解,大神们勿喷,哈哈😆 IM 总体结构: 通用 IM 将用户信息、好友关系、群组关系这些强业务相关数据留给业务方来维护,通用 IM 不对这些数据做存储和同步。 其实这个结构是后端设计的,我觉得发送和接收都应该走长连接的,唉😔 消息上行: ...

iOS 多媒体-音频队列

ios-media-audioqueueservices

介绍 要在 iOS 设备上播放和录制音频,苹果推荐我们使用 AVFoundation 框架中的 AVAudioPlayer 和 AVAudioRecorder 类。虽然用法比较简单,但是不支持流式;这就意味着:在播放音频前,必须等到整个音频加载完成后,才能开始播放音频;录音时,也必须等到录音结束后,才能获取到录音数据。这给应用造成了很大的局限性。为了解决这个问题,我们就需要使用 Audio...

iOS 多媒体-录音

ios-media-avaudiorecorder

介绍 AVFoundation 中使用 AVAudioPlayer 实现音频播放功能是非常简单的。同样在 AVAudioRecorder 实现音频录制功能也是非常简单的。AVAudioRecorder 同其用于播放音频一样,构建于 Audio Queue Services 之上,是一个功能强大且代码简单易用的 Objective-C 接口。我们可以在 Mac 机器和 iOS 设备上使用这个...

iOS 多媒体-音频会话

ios-media-avaudiosession

介绍 事实上上面的播放器还存在一些问题,例如通常我们看到的播放器即使退出到后台也是可以播放的,而这个播放器如果退出到后台它会自动暂停。如果要支持后台播放需要做下面几件事情: 1.设置后台运行模式:在 plist 文件中添加 Required background modes ,并且设置 item 0=App plays audio or streams audio/video using...

iOS 多媒体-音乐

ios-media-avaudioplayer

介绍 基于 System Sound Services 的弊端,如果我们想播放比较大的音频就需要用到 AVFoundation 来实现了,AVFoundation 中使用 AVAudioPlayer 来实现音频播放,AVAudioPlayer 可以当成是一个播放器,可用它来控制进度、音量、播放速度等参数。 AVAudioPlayer 属性 说明...

iOS 多媒体-音效

ios-media-audiotoolbox

介绍 iOS 中音频播放其实可以分为 音效播放 和 音乐播放,音频播放 一般指的是很短的音频,对于这类音频不需要进行进度、循环等控制。音乐播放 一般指的是较长的音频,通常是主音频,对于这些音频的播放通常需要进行精确的控制。对应的在 iOS 中播放这两类音频分别使用 AudioToolbox 和 AVFoundation 。 音效 AudioToolbox 是一套基于 C语言 的框架,使...

load 和 initialize

load-initialize

load load 会在类或分类被添加到 runtime 时调用。并且只会被 runtime 调用一次。 如果子类没有实现,父类的 load 方法也不会被再次调用。 load 的调用顺序 链接的 framework 自己的 image C++ 静态初始化方法,具有 __attribute__(constructor) 修饰的函数 链接到你的 image 其它: ...

Swift 中类的两段式构造

swift-two-phase-initialization

两段式构造 第一阶段: 程序调用子类的某个构造器 为实例分配内存, 此时实例的内存还没有被初始化 指定构造器确保子类定义的所有实例存储属性都已被赋初值 指定构造器将调用父类的构造器, 完成父类定义的实例存储属性的初始化 沿着调用父类构造器的构造器链一直往上执行, 直到到达构造器链的最顶部 第二阶段: 沿着继承树往下, 构造器此时可以修改实例属性和访问se...

iOS 中静态链接库的使用

how-to-use-static-library-in-ios

什么是编译库 与 Java , .net 一样,objc 中也是有编译库的概念,主要用于 SDK (如百度地图SDK),库是编译后的二进制文件,主要是开发一些接口给开发者使用,而这种接口的实现却不能暴露的场景。 编译库的分类 静态库: .a 文件:纯二进制文件,需要配合 .h 文件一起使用,通过 .h 文件引用库里面的内容 .framework 文...

iOS 性能调优

ios-performance-optimization

影响 APP 的底层机制,主要是 CPU , GPU 的占用率和内存的使用率, APP 主线程在 CPU 中,计算显示内容,比如视图的创建,布局,图片解码,文件绘制等,计算完这些东西后交给 GPU 把结果提交到帧缓冲区去,等待下一次 垂直 信号到来时显示到屏幕上。由于垂直同步的机制,如果在一个 VSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再...