空谷无人,水流花开


  • Home

  • Archives

  • Categories

  • Tags

  • About

有关即时通讯的基本概念

Posted on 2018-08-09 | Edited on 2019-07-20 | In IM | 1 Comment

刚接触开发IM时,几个基本的概念把我搞得晕头转向,比如:

  1. Socket 和 WebSocket 有哪些区别和联系?
  2. WebSocket 和 HTTP 有什么关系?
  3. WebSocket 和 HTML5 是什么关系?
  4. 什么是 长连接/短连接、长轮询/短轮询?
  5. WebSocket在哪些场景下使用?
  6. 如果想做IOS的即时通讯,是使用Socket还是WebSocket?

通过google查找了大量资料,觉得有必要把相关内容做一个整理,上面几个问题也会在叙述中逐渐清晰。

Read more »

使用cocoapods插件打包静态库——适用于项目依赖私有库、开源库,私有库又依赖静态库等复杂场景

Posted on 2018-08-07 | Edited on 2019-07-20 | In iOS dev | 1 Comment

我们小组需要持续向其他公司或部门提供一套IM(即时通讯)SDK,为了隐藏源码实现,就需要将它打包为静态库(.a/.framework)的形式。该项目使用cocoapods管理,依赖许多私有库,并且私有库又依赖私有库、开源库等,这些私有库又会涉及频繁更新,每次打包静态库时都需要保证是最新的代码,并且还要解决各个库的依赖问题。在这种情况下,怎么才能方便快速的打包静态库呢?幸好 cocoapods 已经给我们提供了一个打包插件:Cocoapods-package,这让打包静态库的任务变得简单许多。

Read more »

[C++]虚函数,纯虚函数

Posted on 2018-08-04 | In C++ dev | 0 Comments

参考来源:知乎

虚函数

定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。
定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。举个栗子:

Read more »

从MVVM到ReactiveCocoa

Posted on 2018-08-03 | Edited on 2019-07-20 | In iOS dev | 0 Comments

翻译自 Bob Spryn 的 ReactiveCocoa and MVVM, an Introduction
这是一篇很好的文章,从头到尾通读一遍会对MVVM模式以及ReactiveCocoa的使用有种豁然开朗的感觉。现有的译文中存在许多翻译不准确的地方,这里根据原文内容加上自己的理解重新翻译如下。

MVC

任何有经验的软件开发者都会熟悉 MVC 这个概念。它表示 Model View Controller ,是在复杂应用设计中一种久经考验的代码组织方式。在IOS开发中,MVC也被证实具有第二种含义:Massive View Controller (笨重的视图控制器) ,这让许多开发者困惑于如何优雅地对代码进行组织和解耦。IOS开发者需要给 view controller 瘦身,这是他们的共识。然而,怎么做呢?

Read more »

IM消息的可靠投递

Posted on 2018-07-06 | Edited on 2019-07-20 | In IM | 0 Comments

报文类型

im的客户端与服务器通过发送报文(也就是网络包)来完成消息的传递,报文分为三种:
请求报文(request,后简称为为R)
应答报文(acknowledge,后简称为A)
通知报文(notify,后简称为N),这三种报文的解释如下:

R:客户端主动发送给服务器的报文
A:服务器被动应答客户端的报文,一个A对应一个R
N:服务器主动发送给客户端的报文

Read more »

Masonry布局控件frame为0的问题

Posted on 2018-07-06 | In iOS dev | 0 Comments

Masonry 是对 autolayout 的封装,优雅的链式语法和简洁易用的接口让我们在做UI开发时节省了不少时间。然而在初次使用它时,由于还对 autolayout 理解不够深,就遇到了一些问题,比如使用 Masonry 对控件添加约束后,并不会立即生效,frame 仍然是 0。如果此时我们需要这个 frame,应该怎么做呢?

1
2
3
4
5
6
7
8
9
10
11
UIView *parent = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
UIImageView *child = [UIView alloc] init];
[parent addSubview:child];
[child mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(20,20));
make.top.left.mas_equalTo(50);
}];
NSLog(@"%@",redView);

打印结果:
** <UIImageView: 0x7fb222605550; frame = (0 0; 0 0); layer = <CALayer: 0x7fb22260b3a0>>**
Read more »

iOS开发琐碎知识点

Posted on 2018-07-06 | Edited on 2019-07-20 | In iOS dev | 0 Comments

作为一个半路出家的小白、一个为了生活不断积累技术知识的俗人,本着急功近利的的精神把工作中遇到的小问题、琐碎知识点总结下来留给我闺女。
…
…

Read more »

iOS并发编程及陷阱

Posted on 2018-07-06 | Edited on 2019-07-20 | In iOS dev | 1 Comment

在iOS开发中,当使用类似 Grand Central Dispatch(GCD)或 NSOperationQueue 的 API 时,很容易遗忘并发编程中隐藏的问题和陷阱,而且这种问题很难被调试。我们能做的就是遵循某些“规则”,理解一段代码到底不安全在哪里,才能在工作中尽可能规避并发编程的陷阱。

Read more »
12
Yang Jie

Yang Jie

18 posts
3 categories
22 tags
RSS
GitHub StackOverflow
© 2018 — 2021 Yang Jie
Theme — NexT.Mist v6.3.0