刚接触开发IM时,几个基本的概念把我搞得晕头转向,比如:
- Socket 和 WebSocket 有哪些区别和联系?
- WebSocket 和 HTTP 有什么关系?
- WebSocket 和 HTML5 是什么关系?
- 什么是 长连接/短连接、长轮询/短轮询?
- WebSocket在哪些场景下使用?
- 如果想做IOS的即时通讯,是使用Socket还是WebSocket?
通过google查找了大量资料,觉得有必要把相关内容做一个整理,上面几个问题也会在叙述中逐渐清晰。
刚接触开发IM时,几个基本的概念把我搞得晕头转向,比如:
通过google查找了大量资料,觉得有必要把相关内容做一个整理,上面几个问题也会在叙述中逐渐清晰。
我们小组需要持续向其他公司或部门提供一套IM(即时通讯)SDK,为了隐藏源码实现,就需要将它打包为静态库(.a/.framework)的形式。该项目使用cocoapods管理,依赖许多私有库,并且私有库又依赖私有库、开源库等,这些私有库又会涉及频繁更新,每次打包静态库时都需要保证是最新的代码,并且还要解决各个库的依赖问题。在这种情况下,怎么才能方便快速的打包静态库呢?幸好 cocoapods 已经给我们提供了一个打包插件:Cocoapods-package,这让打包静态库的任务变得简单许多。
参考来源:知乎
定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。
定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。举个栗子:
翻译自 Bob Spryn 的 ReactiveCocoa and MVVM, an Introduction
这是一篇很好的文章,从头到尾通读一遍会对MVVM模式以及ReactiveCocoa的使用有种豁然开朗的感觉。现有的译文中存在许多翻译不准确的地方,这里根据原文内容加上自己的理解重新翻译如下。
任何有经验的软件开发者都会熟悉 MVC 这个概念。它表示 Model View Controller ,是在复杂应用设计中一种久经考验的代码组织方式。在IOS开发中,MVC也被证实具有第二种含义:Massive View Controller (笨重的视图控制器) ,这让许多开发者困惑于如何优雅地对代码进行组织和解耦。IOS开发者需要给 view controller 瘦身,这是他们的共识。然而,怎么做呢?
Masonry 是对 autolayout 的封装,优雅的链式语法和简洁易用的接口让我们在做UI开发时节省了不少时间。然而在初次使用它时,由于还对 autolayout 理解不够深,就遇到了一些问题,比如使用 Masonry 对控件添加约束后,并不会立即生效,frame 仍然是 0。如果此时我们需要这个 frame,应该怎么做呢?
1 | UIView *parent = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; |
在iOS开发中,当使用类似 Grand Central Dispatch(GCD)或 NSOperationQueue 的 API 时,很容易遗忘并发编程中隐藏的问题和陷阱,而且这种问题很难被调试。我们能做的就是遵循某些“规则”,理解一段代码到底不安全在哪里,才能在工作中尽可能规避并发编程的陷阱。