Cmb Blog

一生想做浪漫极客

Xcode 中搭建 OpenGL 环境

OpenGL built in Xcode

前言 本文是我导师 向晨宇Tom 的文章上做了一些优化而成,由于导师没有发布这篇文章,个人又觉得挺有帮助的,所以在此基础上做了一些修改并发布出来。如果有兴趣可以看看 元文章。本文主要是讲解如何在 MacOS 下在 Xcode 中搭建 OpenGL 的环境,主要是学习 OpenGL 的时候方便理解,直接可以跑出效果。 所需 Library GLFW: 一个轻量级的,开源的,跨平台的 l...

再见二零一七

the summery of 2017

这一年,其实过得还不错。 年初看着美铺第一版上线,到 3 月份交接,有喜有泪。 刚开始的时候简直是奔溃的,两个人开发日夜加班,但还是要保持乐观,尽量把模块做到少耦合。 交接完终于可以接到组件的任务,从 0 开始写 IM SDK 感觉就像自己的孩子,在自己的手中慢慢成长,据说已经接入到创新项目中了,还是很有成就。 到年中开始加入 PartyNow 团队,这是一个让人哭笑不得的团队,具体...

浅谈 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...