自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无忘无往

志在千里 始于跬步

  • 博客(96)
  • 收藏
  • 关注

原创 Mac工程动态库配置和加载探究

最近在做Mac程序的打包,其中涉及到Mac程序引用了Hoops的第三方动态库。上面的脚本的意思是,在生成Mac程序后,将引用到的libhps动态库copy到程序包的framework目录,以便让hoops动态库和程序一起打包,从而在其他机器上也能够让dyld找到并加载程序所依赖的动态库。

2024-09-04 16:16:14 1463

原创 APP Launch 优化

本文将探讨一下对于APP Launch的相关概念以及影响Launch的因素及优化方法。

2021-12-14 16:52:21 2895

原创 GCD常用函数拾遗

目录dispatch_block_t这几天偶尔又回顾了下GCD的知识。之前我一直以为自己对于GCD已经大体有个整体掌握了,却发现仍还有一些知识点的遗漏。于是写在这里,算是对之前GCD常用函数文章的补充。dispatch_block_t在GCD中,所有的任务,都是封装成block的形式进行派发的。比如void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);dispatch_async的第二个参数,就是一个的block。

2020-08-21 16:48:08 1071

原创 Flutter中如何保活你的StatefulWidget

近期在研究Flutter。大前端应该是未来客户端开发的一个趋势。毕竟,就人力成本和效率来说,大前端是开发的一个必然的选择。而在大前端技术中,Flutter相比React native,Weex,有更高的效率(Flutter原生的控件支持)。同时,Flutter作为Google的亲儿子,有Google的力推,在文档和社区生态方面,也做得十分完善。至少在目前的大前端技术中,Flutter是无人出其...

2020-04-24 16:02:37 1557

原创 小白服务器编程指北(2)——用Docker编配你的服务器环境

安装Docker首先要安装Docker。Docker底层使用的是Linux的容器技术。所以,为了能够使用Docker,我们需要一台安装了兼容版本的Linux内核和二进制文件的最小化功能宿主机。笔者这里使用了CentOS 7操作系统。Step1. Update Docker Package Database更新yum的repo:sudo yum check-updateStep 2:...

2020-01-22 16:26:57 459

原创 Objective-C runtime机制(11)——结业考试

试分析如下代码#import <UIKit/UIKit.h>@interface Student : NSObject@property(nonatomic, strong) NSString *name;@property(nonatomic, strong) NSNumber *age;@end@interface Sark : NSObject@propert...

2019-12-31 11:46:31 1623 5

原创 小白服务器编程指北(1)——从零搭建Django服务器(Centos7+Nginx+uWSGI)

目录前言CentOS配置网络连接配置YUM 源Python3 update前言最近在学习运用python Django框架开发服务器的相关知识。为了能够让服务器在生产环境中运行,也顺便学习了Centos操作系统。总的感觉是,从无到有是最困难的,一个新的环境,新的框架,入了门,接下来就简单了。当然,从入门到深入,又是另一回事,暂且按下不表。现在就记录下如何在Centos下安装Django服务器。...

2019-12-31 11:42:48 669

原创 Objective-C runtime机制(10)——KVO的实现机制

使用KVO自动触发KVO在平日代码中,我们通过KVO来监视实例某个属性的变化。比如,我们要监视Student 的 age属性,可以这么做:@interface Student : NSObject@property(nonatomic, strong) NSString *name;@end@interface ViewController ()@end@implement...

2019-02-21 17:33:56 1750 1

原创 Block背后的数据结构及变量截取

本文的内容主要是基于Clang编译器的官方文档所写。Clang先说些题外话,什么是Clang?Clang是C++编写的编译器。我们知道,我们平常代码所写的任何程序,最终都需要通过编译器转换成与语言无关的机器二进制代码。而Clang,则是支持/C++/Objective-C/Objective-C++的编译器。那我们在做OC开发时,可能也会听说LLVM编译器,那么Clang和LLVM之间是什么关...

2019-02-15 17:35:43 1596 2

原创 Objective-C runtime机制(9)——main函数前发生了什么

在我们的App代码中,程序的入口点是int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }}而对于runtime来说,其入口函数是vo...

2019-01-25 15:35:48 2787

原创 Objective-C runtime机制(8)——OC对象从创建到销毁

在我们前面的几章中,分析了OC的runtime一些底层的数据结构以及实现机制。今天,我们就从一个OC对象的生命周期的角度,来解析在runtime底层是如何实现的。我们创建一个对象(或对象引用)有几种方式?Student *student = [[Student alloc] init];Student *student2 = [Student new];__weak Student *w...

2019-01-22 15:04:12 3341

原创 iOS应用组件化/模块化探究

组件化是近几年流行起的概念,它是当代码扩张到一定程度时,所采取的一种代码组织架构策略。淘宝、蘑菇街等大厂也在近几年陆续完成了其代码组件化的过程。提到组件化,给人的感觉似乎很高大上,很神秘的感觉。但是,正如大多数真正优秀的架构一样,组件化的代码实现并不是很困难,正所谓大道无形,组件化真正的难点并不在于代码的实现,而是如何应用组件化的思想,将现有的工程拆分成一个个组件。本文主要在Casa大神的文章...

2019-01-09 14:48:35 4891 1

原创 AFNetWorking(3.0)源码分析(五)——AFHTTPRequestSerializer & AFHTTPResponseSerializer

在前面的几篇博客中,我们分析了AFURLSessionMangerd以及它的子类AFHTTPSessionManager。我们对AF的主要两个类,有了一个比较全面的了解。对于AFHTTPSessionManager,当其在要发送请求时,会调用AFHTTPRequestSerializer 来组装请求。 而当请求获得了响应,需要作出解析时,又会调用对应的response serializer来解析...

2018-11-21 15:50:29 2929

原创 AFNetWorking(3.0)源码分析(四)——AFHTTPSessionManager(2)

在上一篇博客中,我们分析了AFHTTPSessionManager,以及它是如何实现GET/HEAD/PATCH/DELETE相关接口的。我们还剩下POST相关接口没有分析,在这篇博客里面,我们就来分析一下POST相关接口是如何实现的。multipart/form-data请求在继续理解POST接口之前,我们先来了解一下HTTP协议中和POST相关的multipart/form-data请求...

2018-11-09 15:04:58 982

原创 AFNetWorking(3.0)源码分析(三)——AFHTTPSessionManager(1)

关于AFNetWorking的源码分析已经断更了2年有余,现在来填坑了~AFURLSessionManager & AFHTTPSessionManager在我们访问网站时,可以想象做是我们在与远方的服务器进行“会话(Session)”。我们通过规定好的协议(如HTTP),告诉服务器,我们需要查询(GET)什么,我们要提交(POST)什么,我们要修改(PUT)什么,我们要删除(DELE...

2018-11-06 16:54:52 1527

原创 Objective-C runtime机制(7)——SideTables, SideTable, weak_table, weak_entry_t

在runtime中,有四个数据结构非常重要,分别是SideTables,SideTable,weak_table_t和weak_entry_t。它们和对象的引用计数,以及weak引用相关。关系先说一下这四个数据结构的关系。 在runtime内存空间中,SideTables是一个64个元素长度的hash数组,里面存储了SideTable。SideTables的hash键值就是一个对象obj的ad...

2018-10-11 18:04:40 13594 2

原创 Objective-C runtime机制(6)——weak引用的底层实现原理

前言提起弱引用,大家都知道它的作用:(1)不会添加引用计数 (2)当所引用的对象释放后,引用者的指针自动置为nil那么,围绕它背后的实现,是怎么样的呢?在许多公司面试时,都会问到这个问题。那么,今天就带大家一起分析一下weak引用是怎么实现的,希望能够搞清楚每一个细节。Store as weak当我们要weak引用一个对象,我们可以这么做:int main(int argc, char...

2018-09-20 15:45:15 5989

原创 GCD源码吐血分析(2)——dispatch_async/dispatch_sync/dispatch_once/dispatch group

上一章中,我们知道了获取GCD queue的底层实现。获取到queue后,就需要将任务提交到queue中进行处理。 我们有两种方式提交任务: dispatch_async和dispatch_sync。一个是异步不等待任务完成就返回,另一个是同步任务,需要等待任务完成。这两种提交任务的方式有所不同:dispatch_async :底层运用了线程池,会在和当前线程不同的线程上处理任务。di...

2018-07-30 17:47:41 7778 5

原创 GCD源码吐血分析(1)——GCD Queue

看了快半个月的GCD源码,只能说太变态了。 先来吐槽一下:一个函数,调用栈都是十几层…… 为了效率,代码使用了纯C语言,但是为了模拟面向对象中的继承,虚函数等,定义了一层层的宏定义,看一个struct的定义要绕过来绕过去…… 网上的资料极少,有的那几篇,还都是用旧版本的GCD在说事儿,在新版的GCD源码复杂度及晦涩度,真是简直了……说实话,到现在也不敢说是看懂了或是看对了,所以这篇博客只是个...

2018-07-16 17:03:50 5719

原创 Objective-C runtime机制(5)——iOS 内存管理

概述当我们创建一个对象时:SWHunter *hunter = [[SWHunter alloc] init];上面这行代码在栈上创建了hunter指针,并在堆上创建了一个SWHunter对象。目前,iOS并不支持在栈上创建对象。iOS 内存分区iOS的内存管理是基于虚拟内存的。虚拟内存能够让每一个进程都能够在逻辑上“独占”整个设备的内存。关于虚拟内存,可以参考这里。iOS...

2018-06-25 14:54:33 8132 16

原创 Objective-C runtime机制(4)——深入理解Category

在平日编程中或阅读第三方代码时,category可以说是无处不在。category也可以说是OC作为一门动态语言的一大特色。category为我们动态扩展类的功能提供了可能,或者我们也可以把一个庞大的类进行功能分解,按照category进行组织。关于category的使用无需多言,今天我们来深入了解一下,category是如何在runtime中实现的。category的数据结构cate...

2018-06-11 15:21:24 2674 1

原创 Objective-C runtime机制(3)——method swizzling

方法替换,又称为method swizzling,是一个比较著名的runtime黑魔法。网上有很多的实现,我们这里直接讲最正规的实现方式以及其背后的原理。Method Swizzling在进行方法替换前,我们要考虑两种情况:要替换的方法在target class中有实现要替换的方法在target class中没有实现,而是在其父类中实现对于第一种情况,很简单,我们直接调用me...

2018-06-06 18:18:48 1869 1

原创 Objective-C runtime机制(2)——消息机制

当我们用中括号[]调用OC函数的时候,实际上会进入消息发送和消息转发流程: 消息发送(Messaging),runtime系统会根据SEL查找对用的IMP,查找到,则调用函数指针进行方法调用;若查找不到,则进入消息转发流程,如果消息转发失败,则程序crash并记录日志。SELSEL被称之为消息选择器,它相当于一个key,在类的消息列表中,可以根据这个key,来查找到对应的消息实现...

2018-06-04 18:04:48 3350 3

原创 Objective-C runtime机制(1)——基本数据结构:objc_object & objc_class

前言从本篇文章开始,就进入runtime的正篇。什么是runtime?OC是一门动态语言,与C++这种静态语言不同,静态语言的各种数据结构在编译期已经决定了,不能够被修改。而动态语言却可以使我们在程序运行期,动态的修改一个类的结构,如修改方法实现,绑定实例变量等。 OC作为动态语言,它总会想办法将静态语言在编译期决定的事情,推迟到运行期来做。所以,仅有编译器是不够的,它需要...

2018-05-30 10:06:22 7301 3

原创 Objective-C runtime机制(前传2)——Mach-O格式和runtime

在前传1中,我们分析了解了XNU内核所支持的二进制文件格式Mach-O。同时还留了一个小尾巴,就是Mach-O文件中和Objective-C以及runtime相关的Segment section。今天,就来了解一下它们。OC之源起我们知道,程序的入口点在iOS中被称之为main函数:#import <UIKit/UIKit.h>#import &am

2018-05-25 16:20:55 2524

原创 Objective-C runtime机制(前传)——Mach-O格式

Mach-OMach-O是Mach Object文件格式的缩写。它是用于可执行文件,动态库,目标代码的文件格式。作为a.out格式的替代,Mach-O格式提供了更强的扩展性,以及更快的符号表信息访问速度。Mach-O格式为大部分基于Mach内核的操作系统所使用的,包括NeXTSTEP, Mac OS X和iOS,它们都以Mach-O格式作为其可执行文件,动态库,目标代码的文件格式。具体...

2018-05-21 22:28:50 3421 2

原创 iOS RunLoop完全指南

提起RunLoop,相信每个iOS开发都或多或少的听过,面试时也会经常作为压箱底的问题来问。之前写过RunLoop相关的内容,但是那时写的太浅,基本都是照着苹果文档的翻译。今天,就重新深入了解一下RunLoop。什么是RunLoop概念什么是RunLoop,顾名思义,RunLoop就是在‘跑圈’,其代码本质是一个do while循环。 RunLoop位于苹果的Core Found...

2018-05-16 23:02:21 12519 3

原创 《iOS Drawing Practical UIKit Solutions》读书笔记(四) —— 遮罩,模糊和动画

遮罩,模糊和动画会为我们的APP增色不少,现在,就让我们了解一下吧。用Blocks绘制Images利用下面工具函数,可以简化创建image的过程。typedef void(^DrawingStateBlock)();UIImage * DrawIntoImage(CGSize size, DrawingStateBlock block) { UIGraphicsBeg...

2018-03-24 17:11:04 628

原创 《iOS Drawing Practical UIKit Solutions》读书笔记(四) —— Path Basics

贝瑟尔曲线贝瑟尔曲线是在绘制路径时,常用的方式。通过贝瑟尔曲线,我们可以绘制常规的矩形,椭圆,或弧线。同时,通过二次,三次贝瑟尔曲线,我们还可以绘制更加复杂的曲线。现在,我们就一起来看一下,贝尔瑟尔曲线在iOS绘图中的应用。UIBezierPathUIBezierPath是iOS中提供的贝瑟尔曲线类,它提供了简便的方法调用,来创建矩形、椭圆、圆角矩形以及弧线。Rectang...

2018-03-20 15:26:00 302

原创 《iOS Drawing Practical UIKit Solutions》读书笔记(三) —— Drawing Images

UIKit ImagesUIKit提供了许多函数可以让我们操作Image,甚至我们可以仅通过代码的方式,获取一个UIImage。UIImage *SwatchWithColor(UIColor *color, CGFloat side) { UIGraphicsBeginImageContextWithOptions(CGSizeMake(side, side), YES, 0...

2018-03-14 11:20:48 502

原创 《iOS Drawing Practical UIKit Solutions》读书笔记(二) —— The Language of Geometry

Points VS PixelsPoint是UIKit中的逻辑位置,并不代表像素。主要是在Retina屏幕中,一个Point会对应2或3个Pixels,这取决于PPI(DPI):pixel per inch ,像素密度PPI,指每英尺的像素数,表示了清晰度。ScaleUIScreen类的属性scale, 表明了当前设备点与像素间的关系。因此,对于非Retain屏,scale =...

2018-03-09 10:28:37 348

原创 《iOS Drawing Practical UIKit Solutions》读书笔记(一)——Drawing Context

FrameworksiOS 绘图基于两个库: 1. UIKit 2. Quartz 2DUIKit我们很熟悉,常用的控件UIView,UIButton以及各种ViewController,均来自于UIKit库。Quartz 2D则是基于C语音的绘图库,我们应该听说过,但是真正应用的并不多。Quartz 2D的底层实现是基于Core Graphics的。因此Quartz的一些数据类型...

2018-03-07 10:49:32 595

原创 设计模式深入浅出(六)对象去耦——中介者

对象去耦我们的程序中,一般不会只有一个类,而通常是有多个类互相合作。既然提到互相合作,那么类对象间的耦合性是不可避免的。但是我们需要控制耦合的程度,将类的实现及关系控制在可以灵活改变的程度。当我们发现我们的代码,牵一发而动全身的时候,有两个可能: 1. 类封装的不合理,不符合职责单一原则 2. 类之间的组织方式不合理,需要对象去耦。而这,就需要对象去耦模式。对象去耦主要包括两种模式:中介者,观察

2017-10-15 00:18:32 400

原创 设计模式深入浅出(五)接口适配——外观

我要去旅游大家都很喜欢去旅游,前段时间十一各地都是人山人海,于是我们想到了出国旅游。 旅游分为两种:1. 自由行 2.跟团游 1. 自由行:所有的事情都是亲力亲为,以出国游为例,我们需要自己跑到大使馆去签证,去银行兑换外币,定旅店等。虽然麻烦,但是逍遥自在。 2. 跟团游:无需你做任何事情,只要交钱,剩下的签证,旅馆预订等都有旅游社联系,搞定。方便,快捷。程序中的“旅行社”上面旅游的例子中,你

2017-10-12 23:33:46 442

原创 设计模式深入浅出(四)接口适配——适配器

适配器模式可以说是一个典型的接口适配模式。一个现实中的例子现在让我设想这么一个问题,如何让别人写好的已有的类接口,无缝的融合到我们自己的工程中?前提是,你无法获取到别人的源代码,也就是你不能够修改别人的代码。举一个我们APP中的例子: 我们的APP是一款类似于云盘文件管理系统的软件。它能够接入GoogleDrive,OneDrive,Dropbox等第三方云盘系统。

2017-10-12 21:50:16 1292

原创 设计模式深入浅出(三)接口适配——桥接

OK,通过前两章,我们一起看了创建型模式。现在进入接口适配类型模式。所谓接口适配,就是将不兼容的接口,能够共同合作,同时合理的控制其耦合度。现在介绍第一个接口适配模式,桥接。

2017-10-07 23:54:32 1341

原创 设计模式深入浅出(二)对象创建——Builder,原型,单例

BuilderBuilder模式,顾名思义,建造者。这个模式让我想到了前一段时间的装修。现在的装修工程一般是这样配置的:有一个项目经理,全权由他负责及调度手下的泥工,电工,木工,油漆工的工作。整个装修阶段,泥工,电工等工种会轮流(反复)进场或中间有些交叉,比如,房间铺设电线,需要电工在墙上,地上先开槽,再铺线,当电工做完电线铺设后,需要将开槽回填,这时候需要泥工进场。而当泥工铺好瓷砖等之后

2017-10-04 00:14:29 550

原创 设计模式深入浅出(一)对象创建——工厂方法,抽象工厂

说实话,本人写的设计模式系列博客,也只是依照我目前浅薄的见解来写的,并不能保证完全的正确,也希望大家有不同的想法,可以提出共同探讨。首先我们提到设计模式总是会有一种高大上的感觉,其实设计模式并不是那么高冷,也许我们平常已在不觉总用到了若干设计模式,只是不知道其名字而已。那么什么是设计模式呢?用通俗的话来讲,就是用面向对象的思想来解决日常遇到的问题。

2017-10-02 00:25:26 688

转载 理解RESTful架构

http://www.ruanyifeng.com/blog/2011/09/restful.html不错的文章!

2016-10-09 09:13:06 505

原创 AFNetWorking(3.0)源码分析(二)——AFURLSessionManager

本文对于AFURLSessionManager的网络请求流程,做了一个大致框架上的分析

2016-07-19 08:04:01 6028 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除