- 博客(101)
- 资源 (1)
- 收藏
- 关注
翻译 第13章:算法
一、字符串反转 void char_reverse(char* cha) { // 指向第一个字符 char* begin = cha; // 指向最后一个字符 char* end = cha + strlen(cha) - 1; while (begin < end) { // 交换前后两个字符,同时移...
2018-11-30 17:32:08
509
翻译 第12章:架构/框架
零、概述 架构/框架问题主要用于考察中高级、资深工程师。 1、为什么要在APP中引入框架?他有什么好处呢?1)、模块化2)、分层3)、解耦4)、降低代码重合度 一、图片缓存 1、怎么设计一个图片缓存框架? 2、图片通过什么样的方式进行读写,过程是怎样的?以图片URL的单向Hash值作为key进行存储。读取流程其实就是浏览器的...
2018-11-30 17:27:00
452
翻译 第11章:设计模式
一、六大设计原则 1、单一职责原则一个类只负责一件事 2、依赖倒置原则抽象不应该依赖于具体实现,具体实现可以依赖于抽象。 3、开放-关闭原则对修改关闭,对扩展开放。比如常见的就是可继承,不可修改。 4、里氏替换原则父类可以被子类无缝替换,且原有功能不受任何影响。比如kvo的实现。 5、接口隔离原则使用多个专门协议、而不...
2018-11-30 17:19:25
369
原创 第10章:网络——一、HTTP协议;二、HTTPS与网络安全;三、TCP/UDP;四、DNS解析;五、Session/Cookie
一、HTTP协议 1、你是怎么理解HTTP的?HTTP具体包含哪些内容?HTTP是超文本传输协议,主要包含三部分内容:请求/响应报文,链接建立流程,HTTP的特点。 2、请求/响应报文请求报文由请求行、header、报文内容组成。请求行包括方法、URL、协议版本。header由多个key/value组成。响应报文由响应行、header、报文内容组成。响应行包括版...
2018-11-30 17:13:52
596
翻译 第9章:RunLoop面试问题
一、概念 1、什么是RunLoop?RunLoop是通过内部维护的事件循环来对事件/消息进行管理的一个对象。 2、什么是事件循环?没有消息需要处理时,休眠以避免资源占用,此时当前线程的控制权由用户态切换到内核态;有消息需要处理时,立即被唤醒,此时状态由内核态切换到用户态。 3、应用程序的main函数为什么能一直运行不退出?因为main函数中调用了UI...
2018-11-30 16:41:25
450
翻译 第8章:多线程面试问题——一、GCD;二、NSOperation;三、NSThread;四、多线程与锁
一、GCD 1、同步/异步 和 串行/并发1)、GCD调用的四种组合 dispatch_sync(serial_queue,^{…}); 同步调用串行队列 dispatch_async(serial_queue,^{…});异步调用串行队列 dispatch_sync(concurrent_queue,^{…}); dispatch_asyn...
2018-11-30 16:35:05
771
原创 第7章:Block的使用——一、Block介绍;二、Block的本质;三、Block截获变量;四、__block修饰符;五、Block内存管理;六、Block的循环引用
一、Block介绍 1、Block是将函数及其执行上下文封装起来的对象。二、Block的本质 Block是如何将函数及其上下文封装起来的呢?下面通过源码说明。我们写一个Block的定义及调用方法,然后使用clang -rewrite-objc file.m命令查看编译之后的文件内容,来理解Block的封装、调用过程。 Block的定义及调用方法如下:...
2018-11-30 16:19:35
869
翻译 第6章:内存管理——一、内存管理包含的内容;二、内存布局;三、内存管理方案
一、内存管理包含的内容 1、内存布局 2、内存管理方案 3、数据结构 4、ARC&MRC 5、引用计数 6、弱引用 7、自动释放池 8、循环引用 二、内存布局BSS段存储未初始化的全局变量和静态变量,一旦初始化就会从BSS段中回收掉,转存到数据段中;data段存储已经初始化的全局...
2018-11-30 15:58:15
715
翻译 第5章:运行时相关技术特性——六、动态添加方法;七、动态解析方法
六、动态添加方法 主要用到class_addMethod(要为那个类添加方法,要添加方法的SEL,方法实现,Types);,如class_addMethod(self,@selector(test),testImp,”v@:”);七、动态解析方法 1、是否使用过@dynamic@dynamic修饰属性时,属性的get、set方法是在运行时添加,而不是在编译时生成实现...
2018-11-30 15:40:27
251
原创 第5章:运行时相关技术特性——四、消息转发流程;五、Method-Swizzling
四、消息转发流程 res方法如果处理的话就涉及到动态添加方法的内容,第七小节讲解。 找找资料再整理全面一点,看图说明的不清晰、详细五、Method-Swizzling 1、什么是Method-Swizzling交换两个方法的方法实现。 2、涉及的三个方法如下图...
2018-11-30 15:40:09
413
翻译 第5章:运行时相关技术特性——二、对象、类对象与元类对象;三、消息传递
二、对象、类对象与元类对象 1、类对象和元类对象是什么?两者之间有什么区别?类对象存储实例方法列表等信息;元类对象存储类方法列表等信息。类对象通过isa指针可以找到元类对象。 2、类对象调用类方法时如果元类及祖先元类中都没有该类方法,但是根类对象中有同名的实例方法,那么该实例方法会被调用吗?会的。因为元类对象最终继承自根类对象。 三、消息传递 ...
2018-11-29 22:31:04
282
翻译 第5章:运行时相关技术特性——一、Runtime包含的内容;二、Runtime数据结构
一、Runtime包含的内容 1、Runtime数据结构 2、类对象与元类对象 3、消息传递 4、方法缓存 5、消息转发 6、Method-Swizzling 7、动态添加方法 8、动态解析方法 二、Runtime数据结构 1、Runtime基础数据结构如下objc_object...
2018-11-29 22:24:58
419
翻译 第4章:Objective-C语言相关技术特性——四、扩展;五、代理;六、通知;七、KVO;八、KVC;九、属性关键字
四、扩展 1、一般用扩展做什么?1)、声明私有属性2)、声明私有方法3)、声明私有成员变量 2、扩展的特点(与类别的区别)1)、编译时决议2)、只以声明的形式存在,多数情况下寄生于宿主类的.m文件中3)、不能为系统类添加扩展 五、代理 一般针对初级工程师考察代理,对中级及以上工程师考察的比较少。 1、代理的理解...
2018-11-29 22:17:15
1127
翻译 第4章:Objective-C语言相关技术特性——三、关联对象
1、是否能为分类添加“成员变量”?通过关联对象可以为分类添加成员变量。2、关联对象为分类添加的“成员变量”放在了哪里?关联对象由AssociationsManager管理并在AssociationsHashMap中存储。所有对象的关联内容都在同一个全局容器中。3、关联对象的本质4、源码分析 ...
2018-11-29 22:06:21
279
翻译 第4章:Objective-C语言相关技术特性——二、分类
1、用分类做了哪些事情 1)、声明私有方法 2)、分解体积庞大的类文件 3)、把Framework的私有方法公开化2、分类的特点(与扩展的区别) 1)、运行时决议:运行之前分类的方法并没有附加到宿主类中,运行时通过runtime将分类内容添加到宿主类中 2)、可以为系统类添加分类3、分类中都可以添加哪些内容 ...
2018-11-29 22:02:57
310
翻译 第4章:Objective-C语言相关技术特性——一、Objective-C语言相关技术特性
一、Objective-C语言相关技术特性 分为如下几类: 1、分类 2、关联对象 3、扩展 4、代理 5、通知 6、KVO 7、KVC 8、属性关键字...
2018-11-29 21:56:52
470
翻译 第三章UI视图——七、离屏渲染==属于GPU的优化部分
1)、On-Screen Rendering 意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行2)、Off-Screen Rendering 意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作3)、何时触发离屏渲染 当我们指定了UI视图的某些属性,标记为它在未预合成之前不能用于当前屏幕上直接显示时就...
2018-11-29 21:54:17
336
翻译 第三章UI视图——六、UI绘制原理&异步绘制==属于CPU的优化部分
这是高级考察点。1、UIview绘制原理步骤如下: 其中view.layer调用setNeedsDisplay方法之后只是给当前layer打上了一个脏标记,然后在当前runloop将要结束时调用layer的dispaly方法,然后进入当前视图真正的绘制流程中。2、系统绘制流程如下 在layer内部会创建一个backing store,即CGContext...
2018-11-29 21:52:47
524
翻译 第三章UI视图——五、UI卡顿、掉帧
1、UI卡顿、掉帧原因2、滑动优化方案(高级面试问题)预排版放到子线程去做 如果触发了离屏渲染,则GPU触发OpenGL的多通道渲染管线,造成额外的开销,使得进行纹理渲染的工作量就会非常大,容易造成掉帧。 如果视图层级非常复杂,则GPU进行视图混合的工作量就会非常大,因为需要合成每个像素点时需要做大量计算。...
2018-11-29 21:50:12
423
翻译 第三章UI视图——四、图像显示原理
该部分在面试过程中考察的比较隐晦,相对高级,也是对UI卡队的铺饰。CPU和GPU做了哪些事:CPU的主要工作如下: 1)、Layout过程:主要是UI布局、文本计算 2)、Display过程:主要是绘制过程,比如drawrect方法就是在该过程调用 3)、Prepare过程:比如对视图中图片的解码 4)、Com...
2018-11-29 21:47:57
626
翻译 第三章UI视图——三、事件响应和视图响应
1、UIView和CALayer之间的关系 1.1、关系:a、UIView为CALayer提供内容,以及负责处理触摸等事件,参与响应连;b、CALayer负责显示内容contents总结:UIView专门负责事件传递和视图响应的,CALayer 专门负责视图的显示工作。这种设计体现了六大设计原则中的单一职责原则。 1.2、为什么如此设计:这是单一职责原则的体现...
2018-11-28 23:15:40
365
翻译 第三章UI视图——二、UITableView 相关面试问题
1、重用机制:通过自定义“字母索引条”来理解重用机制2、数据源同步 主要有两种解决方案: 1)、并发访问、数据拷贝 下面通过时序图说明 2)、串行访问 ...
2018-11-28 23:09:49
337
翻译 第三章UI视图——一、UI视图面试考点简介
1、UITableView 相关面试问题2、事件响应和视图响应:必考点3、图像的显示原理使开发者更好的理解UI卡顿和掉帧的原因4、卡顿和掉帧5、视图绘制原理和异步绘制异步绘制是解决滑动性能的关键技术解决方案6、离屏渲染...
2018-11-28 23:05:16
282
翻译 第二章——二、如何编写简历
1、简历表达的宗旨 1)、简洁性排版清晰简洁不是少,亮点和优势仍要突出:项目经验少的1-2年工作者写1-2页,三年以上的工作者不要超过3页挑选重要的突出的表达 2)、真实性可以包装,但不能伪造。包装的技巧有:用量化的指标说明,如前后crash量的变化、线上bug数的变化、开发成本节约了多少、不要说PV和UV增加了多少(这是衡量产品的,体现不出技术能力);...
2018-11-28 22:40:31
215
翻译 第二章——一、各大公司对初、中、高级程序员的要求
初级级工程师要求:(主要要求会用)1、精通Objective-C语言基础:能够熟练并正确的使用oc的分类、扩展、kvo、kvc2、精通UIKit等Cocoa Framework:能够熟练的自定义控件3、熟悉网络通信机制及常用数据传输协议:协议理解(包括http、https、常用的加密算法)、数据解析4、具备主流开源框架的使用经验中级工程师要求:(停留在为什么这样用的层面)1...
2018-11-28 21:50:15
459
原创 git使用过程中遇到的问题
1、gitignore 文件添加了,但是更新下来,可能不起作用。此时用 git rm -r —cached 清除下暂存空间即可, cached前面是两个杠
2018-01-26 17:54:30
298
原创 Rx.js、Observable、Subject 、Observer、Promise、EventEmitter理解
一、Rx.js理解Rx.js是函数响应式编程,Observable、Subject 、Observer是其对外提供的实现。Observable 其实就是 Promise++ (Promise 对象用于执行某个异步操作)。在 Rx 中,你可以很简单地把一个 Promise 转换成一个 Observable,只需要:var stream = Rx.Observable.fromProm
2018-01-26 17:34:11
2404
原创 代码优化——cell重用
通过iOS程序的启动执行顺序及UIViewController、UIView的生命周期这篇文章,我总结出:带不带xib的vc和view都是可以继承的,只不过父类中的视图结构复杂的话子类可定制的余地很低,更多的只是在某个空白的子view上添加视图,或者是对原视图中的元素进行更多的控制。但是看了iOS开发之新浪微博山寨版代码优化之后,发现我的总结还是不严谨的,对于从storyboard或xib启动的v
2018-01-26 14:36:47
315
原创 iOS程序的启动执行顺序及UIViewController、UIView的生命周期
一、iOS启动过程流程说明如下:1、程序入口进入main函数,设置AppDelegate称为函数的代理2、程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:]3、创建window窗口4、程序被激活[AppDelegate applicationDidBecomeActive:]5
2018-01-25 18:23:35
1934
转载 “低版本中使用高版本中出现的类”之技术实现原理详解
声明:本文转载于http://www.jianshu.com/p/55180ade32d1引言我在github上写了一个GJAlertController的开源库,是为了解决在iOS8以下的系统中使用UIAlertController的问题,结果收到了100多个星星,让我受宠若惊,感谢各位的支持,也感谢我的同事"芋头"帮我在微博上转发,下面详细说明一下实现原理。iOS8中苹
2017-02-15 10:25:46
502
转载 xib、stoaryboard详解
一、xib、sb简介1、xib执行效率的确没有代码效率高,因为加载要多一步——把xib文件加载到内存中2、SB还会省去很多页面跳转之间的胶水代码(segue),甚至不用写代码就能实现在各个页面中切换,tableView的cell可以直接拖到tableView里,可以给tableView添加header、footer,可以添加手势、设置代理、size classes使得适
2017-02-14 17:53:05
1221
转载 UITextView限制字数的同时动态适应高度处理
本篇文章是“UITextView限制字数”这片文章的增强、完善,转载自http://blog.csdn.net/fengsh998/article/details/45442391,最终代码如下,具体完善过程参考原文。- (CGSize)getStringRectInTextView:(NSString *)string InTextView:(UITextView *)textView;
2016-09-28 10:53:55
536
转载 UITextView 输入之字数限制
对于限制UITextView输入的字符数。相信大家在网上见得最多的是实现UITextViewDelegate- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;//有输入时触但对于中文键盘出示的联想字选择时不会触发-
2016-09-27 09:50:06
610
原创 NSDate、NSTimeInterval、NSDateFormatter、NSLocale 、NSTimeZone、NSDateComponents详解
一、世界时间、UTC、GMT的理解NSDate时差这篇博客很好,让我对时区做到了大致理解:世界时间和GMT、UTC时间并不冲出,世界时间只是从经度上把时间划分成了24时区,其本初子午线还在英国伦敦;UTC与GMT并没有很大的区别,只是比GMT精准一些,对于普通人无差别。从ios4.1开始[NSDate date]获取的是GMT时间,由于北京位于本初子午线东边,且相差8个时区,所
2016-08-02 10:25:09
3256
原创 UICollectionView详解
=====================首先,UICollectionView入门=================原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://rainbownight.blog.51cto.com/1336585/1323780一、需要实现的协议UICollec
2016-07-20 16:52:14
3468
转载 CALayer的渲染架构、事务管理、时间系统的理解
原文地址:http://www.cnblogs.com/bucengyongyou/archive/2012/12/20/2826619.html我在原文的基础上稍作整理,如有疑问请参考原文。一、Layer的渲染架构Layer也和View一样存在着一个层级树状结构,称之为图层树(Layer Tree),直接创建的或者通过UIView获得的(view.layer)
2016-06-03 10:09:38
1344
原创 Core Animation动画概述
Core Animation动画概述1、概述在iOS中,图形可分为以下几个层次:越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低。本文着重介绍Core Animation层的动画实现方案。2、动画概念类在iOS中,展示动画可以类比于显示生活中的“拍电影”。拍电影有三大要素:演员+剧本+开拍,概念类比如下:演员--->CA
2016-06-02 11:06:01
728
原创 CALayer的属性、接口总结
1、创建与初始化layer相关+ (instancetype)layer;//创建并初始化一个layer- (instancetype)initWithLayer:(id)layer;//通过一个layer创建一个副本2、渲染层layer与模型层layer- (nullable id)presentationLayer;//渲染层layer- (
2016-06-02 10:43:48
2171
代码优化——cell重用
2018-01-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人