- 博客(42)
- 资源 (19)
- 收藏
- 关注
原创 微服务一:概述
微服务一:概述微服务是最近几年大热的话题。不过这倒不是这几年才有东西,而是在零几年就有大公司们实施了,不过那时候不叫这个名字。一、微服务是什么所谓微服务,就是大的服务器拆分成各种小的服务器,由各种不同功能的小服务组合成对外完整功能的服务器。为什么需要拆分呢?传统型单服务的问题以前,一个产品,一般对应一个后台服务器。随着功能不断迭代,服务器代码越来越复杂,越来越庞大,问题也越来越多:1...
2020-01-07 09:20:12
231
原创 用 Typescript 写个状态机
有限状态机,是常用的一种编程范式。游戏领域和编译器领域等工作的小伙伴,应该很常用的了。如果不熟悉,那咱们先来看看状态机是什么。状态机假设有这样一个需求在介绍状态机之前,假设有这样一个需求:咱们在开发一款打斗类游戏,游戏里有一个主角,咱们要通过键盘控制主角的行为。主角可以站立、蹲着、跳跃,这些行为的流程如下:总结一下:通过键盘按钮主角的行为;主角的行为包括:站立、蹲着、跳跃;站立(...
2019-11-11 11:52:13
2904
4
原创 HTTPDNS 在 iOS 中的实践
“未找到主机名”,这是很常见的错误。出现这个错误,按理来说,应该也是正常的。但郁闷的是,常常别的应用能正常使用,偏就是自己开发的应用不行,这实在令人头痛。原因目前很多 APP 会用 HTTP/HTTPS 来进行网络交互。APP 会用域名访问接口,正常情况下,如果设备网络畅通的情况下,都是能正常访问到服务器的。但是 DNS 劫持、UDP 不稳定等,者导致经常出现域名无法解析的情况,自然也就无法正常请求
2016-12-20 22:53:32
5671
1
原创 ByteCountFormatter 简介
ByteCountFormatter 介绍一个 Foundation 中不常用的小工具类:ByteCountFormatter。这个类很简单,它就是将字节数格式化成适合的描述(KB、MB、GB 等),还是很方便的。 示例如下:let b1000KB1 = ByteCountFormatter.string(fromByteCount: 1000 * 1024, countStyle: .bina
2016-09-28 22:58:06
1542
原创 iOS 利用 Autolayout 实现 view 间隔自动调整
iOS 利用 Autolayout 实现 view 间隔自动调整标签: Autolayout1、需求 不知道大家是否常有这样的需求:一个界面中,有多个 view,每个 view 的大小由其内容决定。当一个 view 有内容时,下一个 view 与它之间会一个间隔。如果没有内容的话,下一个 view 就会紧挨着它。如下图所示: [图1] 图1 中,四个 label 的大小是自适应的
2016-07-09 16:13:59
3618
原创 HTTPS 初解
标签(空格分隔): https 基础 在进行 HTTP 通信时,信息可能会监听、服务器或客户端身份伪装等安全问题。HTTPS 则能有效解决这些问题。这里就简单了解下 HTTPS。1、HTTP 存在的问题 HTTP 日常使用极为广泛的协议,它很优秀且方便,但还是存在一些问题,如: - 明文通信,内容可以直接被窃听 - 无法验证报文的完整性,可能被篡改 - 通信方身份不验证,可能遇到假
2016-03-18 23:27:20
851
原创 OC 自动生成分类属性方法
标签(空格分隔): Objective-C runtime iOS 分类 category 分类属性方法自动生成编码全过程。背景 分类,在 iOS 开发中,是常常需要用到的。在分类里添加属性也是常有的事,但分类中无法添加实例变量,编译器也无法为提供分类中属性的 getter 和 setter 方法了。一般而言,需要手动来实现这两个方法,如果只是用来存储变量的话,关联对象很容易做到这一点:@int
2015-12-14 00:43:31
1387
原创 iOS 中的 promise 模式
标签(空格分隔): Promise PromiseKit 异步 Bolts-iOS1、概述 异步编程 App 开发中用得非常频繁,但异步请求后的操作却比较麻烦。Promise 就是解决这一问题的编程模型。其适用于 延迟(deferred) 计算和 异步(asynchronous) 计算。一个 Promise 对象代表着一个还未完成,但预期将来会完成的操作。它并非要替代 GCD 和 NSOperat
2015-11-15 14:43:24
3955
原创 ReactiveCocoa2 源码浅析
ReactiveCocoa2 源码浅析标签(空格分隔): ReactiveCocoa iOS Objective-C • 开车不需要知道离合器是怎么工作的,但如果知道离合器原理,那么车子可以开得更平稳。 ReactiveCocoa 是一个重型的 FRP 框架,内容十分丰富,它使用了大量内建的 block,这使得其有强大的功能的同时,内部源码也比较复杂。本文研究的版本是2.4.4,小版本间的差别不
2015-08-27 22:16:44
4058
原创 限制 UITextField 输入长度
限制 UITextField 输入长度标签(空格分隔): UITextField UITextField 是 iOS 中最常用的组件之一。关于它也有各种各样的需求,这些需求是它本身没有提供相应的API的。限制输入框文本长度是常见的需求,UITextField 本身也并没有为此提供API。本文尝试给其加入这个功能。1、通过 delegate 来实现 限制 UITextField 的输入字数,首先想
2015-06-24 18:46:41
2910
翻译 响应式编程介绍
响应式编程简介(原文) 你应该对响应式编程这个新事件有点好奇吧,尤其是与之相关的部分框架:Rx、Bacon.js、RAC等等。 在缺乏好的资源的情况下,学习响应式编程成为痛苦。我开始学的时候,做死地找各种教程。结果发现有用的只是极少部分,而且这少部分也只是表面上的东西,对于整个体系结构的理解也起不了多大的作用。直接去看那些库文档同样也理解不了。比如下面这个: Rx.Observable.pr
2015-06-15 17:35:02
22799
1
原创 OC判断对象是否相等
你是否真的了解OC对象相等?标签: objective-c 比较两个对象是否相等是一个常用的功能。==操作符比较的不是对象,而是两个指针本身,一般来说这不是咱们所想要的。要想判断对象是否相等,应该使用 NSObject 协议中声明的isEqual:方法来判断。一般来说,两个类型不同的对象总是不相等的。 如果你已经有过一些 OC 的编码经验的话,你一定自定义过isEqual:方法。那么你是碰到
2015-06-08 22:51:51
5956
原创 Objective-C 给分类添加属性——关联对象
给分类添加“属性”咱们知道,分类中可以添加方法,却无法添加属性。那咱们有其他的方法来实现吗? 先来看看下面这段代码:@interface UIView (nl_Frame)@property (nonatomic, assign) CGFloat nl_width;@end @implementation UIView (nl_Frame)- (void)setNl_width:(CGFlo
2015-06-07 13:59:26
6239
原创 NSRunLoop基本原理
iOS 中 的 run loop 浅析run loop解惑 runloop 虽然是与线程想关的重要概念,但 cocoa 中的 runloop 终是用得不多,观相关博文却也未得入门其“why”。所以浅习几日,得一粗陋分享浅文,作为笔记,写下其所以然。有不对或错误的地方,还望指教,不甚感激。 线程在执行完后,会被销毁。为了使线程能一直运行,咱们可以在线程里边弄个运行循环(run l
2015-04-12 00:44:49
3422
2
原创 iOS中的崩溃类型
iOS中的崩溃类型 在这里了解一下XCode用来表示各种崩溃类型的术语,补充一些这方面的各知识。崩溃通常是指操作系统向正在运行的程序发送的信号,所以我们在查看崩溃日志时,常常看到如下错误摘要:Application received signal SIGSEGV。一般来说,常见的崩溃类型有以下几种: 1、 EXC_BAD_ACCESS在访问一个已经释放的对
2015-03-13 17:04:39
5998
1
原创 ReactiveCocoa理解(持续更新中)
引子ReactiveCocoa 是 OC 的一个强大的框架。它的强大之处不仅仅在于提供了很多用于简化工作的方法,更在于它提供了一种思考方式。比如这样的场景:一个登录界面,有用户名文本框、密码框以及登录按钮。只有用户名文本框文本长度大于等于6并且密码框文本长度大于等于6时,登录按钮才能被点击。按照普遍的实现方式是:每当文本框或密码框文本发生变化时,都检查登录按钮此时是否可被点击。这种方法将精力集
2014-10-27 23:24:50
4188
原创 autolayout 概述
终于可以完全放弃 iOS5的支持了,等了好久才用上这 autolayout。好吧,虽然这东东已经出现两三年了,不过现在才能用得上,所以现在才学,我是个懒家伙。好记性不如烂笔头,学点记点总是好的。 autolayout 彻底改变了视图而已,将咱们的注意力从 frame、方向等集中到了屏幕上的对象之间的关系上。自动布局简化了布局,加上现在 XCODE 中 IB 的强力支持,可以说是极
2014-10-23 23:00:10
617
转载 宏定义的黑魔法 - 宏菜鸟起飞手册
dr宏定义的黑魔法 - 宏菜鸟起飞手册宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行。而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多。但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加。如果想成为一个能写出漂亮优雅
2014-10-11 09:34:24
1493
1
翻译 ReactiveCocoa基本组件:理解和使用RACCommand
原文地址在这里。本文源码:https://github.com/olegam/RACCommandExample RACCommandRACCommand是ReactiveCocoa的基本组件之一,能节省开发的大部分时间,同时使得iOS/OS X 应用更健壮。 我看到一部分ReactiveCocoa(以下简单RAC)新人并没有完全理解RACCommand,自然也就不
2014-07-09 14:22:20
21286
原创 陇西郡 李字辈
远万高和玉 茂广绍兴隆克承先世德 嗣述永昌荣良谟遗厚福 光大迪新猷善继前人志 诗书启懋修忠孝传家训 网维重本源英贤襄盛治 景运庆升恒博古郁文彩 谦恭益寿康椒蕃祥瑞霭 雍穆裕绵长
2014-05-25 00:35:48
2275
原创 Block 5:Block解析之截获局部变量值
源代码:int main(int argc, const char * argv[]){ int dmy = 256; int val = 10; const char *fmt = "val = %d\n"; void (^blk)(void) = ^{printf(fmt, val);}; val = 2; fmt = "These va
2014-05-04 22:45:14
1227
原创 Block 4:Block实质解析
Block是“带有局部变量值的匿名函数”,但Block究竟是什么呢? 前面所说的Block语法看上去好像很特别,但它实际上是作为极普通的C语言源代码来处理的。通过支持Block的编译器,含有Block语句的源代码转换为一般C语言编译器能够处理的源代码,并作为极为普通的C语言源代码被编译。 这不过是概念上的问题,在实际编译时无法转换成我们能够理解的源代码,但clang
2014-04-16 23:30:39
2898
原创 C++的this,Objective-C的self
C++中定义类的实例方法如下:void MyClass::method(int arg) { printf(“%p %d\n”, this, arg);}C++编译器将该方法作为C语言函数来处理。void __ZN7MyClass6methodEi(MyClass *this, int arg) { printf(“%ps %d\n”, this, arg);}
2014-04-15 22:43:05
2643
原创 Block 3:__block说明符
1 截获局部变量值 通过Block语法和Block类型变量的说明,我们已经理解了“带有局部变量值的匿名函数”中的“匿名函数”。而“带有局部变量值”究竟是什么呢?“带有局部变量值”在Blocks中表现为“截获局部变量值”。截获局部变量值的实例如下:int main(int argc, const char * argv[]){ int val = 10; const
2014-04-13 23:28:34
872
原创 Block 2: Block语法
Block语法 下面详细讲解一下带有局部变量值的匿名函数Block的语法。前面按钮回调例子中使用的Block语法如下:^(int event) { printf(“buttonId:%d event=%d”, i, event);} 实际上,该Block语法使用了省略方式,其完整形式如下: 如上所示,完整形式的Block语法与一般的C语言
2014-04-12 23:49:29
1039
原创 Block 1:什么是Blocks
Blocks是C语言的扩充功能。可以用一句话来表示Blocks的扩充功能:带有局部变量的匿名函数。 顾名思义,所谓匿名函数就是不带名称的函数。C语言的标准不允许存在这样的函数。例如以下源代码:int func(int count); 它声明了名称为func的函数。下面的源代码中为了调用该函数,必须使用该函数的名称func。int result = func(10);
2014-04-11 23:00:56
1652
原创 GCD之五:dispatch_barrier_async
在访问数据库或文件时,使用Serial Dispatch Queue可避免数据竞争的问题。 写入处理确实不可与其他的写入处理以及包含读取处理的其他某些处理并行执行。但是如果读取处理只是读取处理并行执行,那么多个并行执行就不会发生问题。 也就是说,为了高效率地进行访问,读取处理追加到Concurrent Dispatch Queue中,写入处理在任一个读取处理没有执行的状态下,追
2014-04-08 22:27:20
1492
原创 GCD 之四:Dispatch Group
在追加到Dispatch Queue中的多个处理全部结束后想执行结束处理,这种情况会经常出现。只使用一个Serial Dispatch Queue时,只要将想执行的处理全部追加到该Serial Dispatch Queue中并在最后追加结束处理,即可实现。但是在使用Concurrent Dispatch Queue时或同时使用多个Dispatch Queue时,源代码就会变得颇为复杂。
2014-04-07 18:39:59
2060
原创 GCD 之三: Main Dispatch Queue/Global Dispatch Queue
第二种方法是获取系统标准提供的Dispatch Queue。 实际上不用特意生成Dispatch Queue系统也会给我们提供几个。那就是Main Dispatch Queue和Global Dispatch Queue。 Main Dispatch Queue正如其名称中含有的“Main”一样,是在主线程中执行的Dispatch Queue。因为主线程只有1个,所
2014-04-06 22:03:05
3027
原创 GCD之二:dispatch_queue_create
第一种方法是通过GCD的API生成Dispatch Queue。通过dispatch_queue_create函数可生成Dispatch Queue。以下源代码生成了Serial Dispatch Queue。dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create(“com.example.gcd.MySerialDis
2014-04-05 15:04:11
12134
原创 GCD 之一: Dispatch Queue
Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。1、Dispatch Queue
2014-04-04 23:44:13
1054
翻译 ReactiveCocoa 入门指导
原文地址:http://www.teehanlax.com/blog/getting-started-with-reactivecocoa/ 在先前的文章中,介绍一了ReactiveCocoa概念,ReactiveCocoa是Objective-C中用于声明式编程的类库。接下来在这里会介绍一些ReactiveCocoa中的模式,讨论一些最佳实践,并指出一些常见的陷阱。R
2014-03-30 00:45:31
6038
翻译 iOS上的ReactiveCocoa响应式编程
注:这是稍微面向iOS开发者们的文章。Objective-C是一门基于C的高级编程语言。然后随着计算机运算能力和高级编程语言艺术设计不断发展,Objective-C看起来有些过时了。Objective-C和C是命令式编程语言,程序员得按计算机执行顺序写好一行行语句,产生的行为就是执行这些指令。如果开发者写的语句和顺序都没有错,那么产生的行为就应该能满足项目的需要。然而,
2014-03-27 14:05:45
2634
原创 iOS相关文章和开源库收集
1、 iOS屏幕尺寸和一些开源库 http://www.taoge.me/2、 用户引导库:Introduction Tutorial View3、开源中国社区4、最受欢迎的IOS开源库
2013-05-14 22:18:18
880
转载 翻译:零基础学习iOS开发流程——从注册账号到提交应用(Part 1)
http://iposei.com/2012/06/23/translate-how-to-submit-your-app-to-apple-from-no-account-to-app-store-part-1/
2013-05-11 13:19:31
950
转载 三个星期从0开始 制作IOS游戏并提交上架
http://www.cnblogs.com/zc22/archive/2012/12/05/2803103.html准备设备:一台macbook air。我香港买的,花了7k多。用起来绝对的爽。苹果的开发者账号,当时我让爸传真汇款的,700多。挺好奇,美国竟然可以不问我信用卡密码直接划款了,如果随便搞那会怎样?? 学习阶段:无论你学习什么,选好一本书,从头看到
2013-05-11 11:35:26
745
原创 HDU 1236 标准水题
<br />排序搞错了,想当然的从后面排到前面,应该是从前面排到后面才是,唉,人老啦<br />#include <iostream>#include <string>#include <algorithm>using namespace std;struct People{ string number; int mark;};bool cmp(const People &e1,const People &e2){ int i,len=e1.number.leng
2010-10-02 14:42:00
545
原创 C++string类常用函数默认分类
C++string类常用函数默认分类 string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 string类的字符操作:const char &
2010-08-17 00:40:00
807
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人