随笔分类 -  iOS-理论底层

摘要:一.iOS在切换根控制器时,如何销毁之前的控制器?(切换rootViewController时注意的内存泄漏) 首先、在iOS的ARC机制下,任何对象,当没有其他对象对他进行强引用时,都会被自动释放。 而控制器的切换主要为两种方式 push和present modally。 1.0 push出来的子 阅读全文
posted @ 2018-03-08 14:45 俊华的博客 阅读(7909) 评论(0) 推荐(0)
摘要:什么是 AOP Wikipedia 上的 AOP 定义: In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing th 阅读全文
posted @ 2017-09-27 16:29 俊华的博客 阅读(791) 评论(0) 推荐(1)
摘要:什么是库 ? 库就是程序代码的集合,将N个文件组织起来,是共享程序代码的一种方式。库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。 库的分类 开源库:源代码是公开的,可以看到每个实现文件(.m文件)的实现,例如GitHub上的常用的开源库:AFNetworking、SDWebIma 阅读全文
posted @ 2017-09-27 14:30 俊华的博客 阅读(19430) 评论(1) 推荐(2)
摘要:前言:处于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如在用户授权情况下访问通讯录,相册等),这个规则展示了iOS系统的封闭性。在开发中常常需要数据存储的功能,比如存取文件,归档解档等。 一、沙盒目录结构 每个APP的沙盒下面都有相似目录结构,如图(苹果官 阅读全文
posted @ 2017-09-27 10:14 俊华的博客 阅读(3176) 评论(0) 推荐(0)
摘要:谈到链式编程,那Masonry几乎就是最经典的代表.如: 像这样top.equalTo(self.view).offset(60)通过”点”语法,将需要执行的代码块连续的书写下去,就是链式编程.它能使代码简单易读,书写方便 1.传统写法,两个方法需要单独调用,也不能任意组合顺序 创建Person类 阅读全文
posted @ 2017-08-11 14:05 俊华的博客 阅读(3571) 评论(0) 推荐(0)
摘要:什么是RunLoop 注释:和ppt上总结的一样 和代码一块去理解 从字面上看 运行循环 跑圈 循环 基本作用 保持程序的持续运行(比如主运行循环) 处理App中的各种事件(比如触摸事件、定时器事件、Selector事件) 节省CPU资源,提高程序性能:该做事时做事,该休息时休息 存在价值 没有Ru 阅读全文
posted @ 2017-02-24 10:53 俊华的博客 阅读(643) 评论(0) 推荐(0)
摘要:Gesture Recognizers与触摸事件分发 通过一个问题引出今天的知识: 1.大家应该都遇见过 当需要给tableView 添加一个tap 手势识别 但是tableView 的上的事件(滑动...)还不影响,这时候应该怎么做呢? 答:应该设置tap.cancelsTouchesInView 阅读全文
posted @ 2016-12-05 15:00 俊华的博客 阅读(1694) 评论(0) 推荐(0)
摘要:一、事件的产生和传递 1.1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中为什么是队列而不是栈?因为队列的特定是先进先出,先产生的事件先处理才符合常理,所以把事件添加到队列。 UIApplication会从事件队列中取出最前面的事件,并将事件分发下 阅读全文
posted @ 2016-12-05 14:25 俊华的博客 阅读(1904) 评论(0) 推荐(0)
摘要:经典面试题:为什么 NSString 类型成员变量的修饰属性用 copy 而不是 strong (或 retain ) ? 在初学 iOS 的时候,可能会被灌输这么一个常识,切记 NSString 的 property 的修饰变量要写作 copy ,而不是 strong,那么这是为什么? 我们在声明 阅读全文
posted @ 2016-08-30 16:22 俊华的博客 阅读(371) 评论(0) 推荐(0)
摘要:一、KVC 的用法和实践 用法 KVC(Key-value coding)键值编码,顾名思义。额,简单来说,是可以通过对象属性名称(Key)直接给属性值(value)编码(coding)“编码”可以理解为“赋值”。这样可以免去我们调用getter和setter方法,从而简化我们的代码,也可以用来修改 阅读全文
posted @ 2016-08-24 13:36 俊华的博客 阅读(2669) 评论(1) 推荐(1)
摘要:KVO的用法 KVO也就是key-value-observing(即键值观察),利用一个key来找到某个属性并监听其值得改变。用法如下: 添加观察者 在观察者中实现监听方法,observeValueForKeyPath: ofObject: change: context:(通过查阅文档可以知道,绝 阅读全文
posted @ 2016-08-24 11:48 俊华的博客 阅读(5114) 评论(0) 推荐(0)
摘要:当我们需要将一个对象进行归档时,都要让该对象的类遵守NSCoding协议,再实现归档和接档方法。例如有一个Person类,该类有两个成员变量 两个协议的实现方法如下 但当该类拥有上百个属性时,那将会花费更多的功夫在重复代码上,所以使用运行时机制截取类的成员变量,进行赋值 例如有一个狗类Dog和它的父 阅读全文
posted @ 2016-08-23 12:32 俊华的博客 阅读(1395) 评论(0) 推荐(1)
摘要:一、对象的关联方法有 1、 void objc_setAssociatedObject(id object, const void *key, id value,objc_AssociationPolicy policy) ,关联对象(将值value与对象object关联起来) 参数key:将来可以 阅读全文
posted @ 2016-08-23 12:26 俊华的博客 阅读(1719) 评论(0) 推荐(1)
摘要:动态的交换方法能够给项目中大量已经使用的方法 进行拦截增加操作 实践:利用运行时交换系统的ImageNamed:方法 应用背景 当系统需要适配ios7和ios8时可能会有显示不同图片的需求,但在老项目上开发ios7程序时并未考虑到ios8的适配,当项目上有几百处地方用到ImageNamed:方法时, 阅读全文
posted @ 2016-08-23 12:00 俊华的博客 阅读(2297) 评论(0) 推荐(1)
摘要:IMP IMP-指向实际执行函数体的函数指针 可以看到,这个函数体前两个参数是 id(消息接受者,也就是对象),以及SEL(方法的名字) method/objc_method method - 指向Objective C中的方法的指针 其中 _cmd SEL 类型的一个变量,Objective C的 阅读全文
posted @ 2016-08-11 12:06 俊华的博客 阅读(764) 评论(0) 推荐(1)
摘要:iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要,基本都要继承自他。 一、iOS程序的启动执行顺序 1 程序的入口 进入main函数, 设置AppD 阅读全文
posted @ 2016-08-05 18:51 俊华的博客 阅读(16641) 评论(0) 推荐(2)
摘要:iOS View布局重绘机制相关方法 布局 - (void)layoutSubviews - (void)layoutIfNeeded- (void)setNeedsLayout —————————————————————————————— 重绘 - (void)drawRect - (void)s 阅读全文
posted @ 2016-07-25 18:36 俊华的博客 阅读(2298) 评论(0) 推荐(0)
摘要:类族模式在UIKit(user interface framework)使用的范围已经远远超过我们的想象,比如,UIButton,NSArray,NSString,NSNumber等, 例如NSNumber类 做iOS开发的朋友们一定用过NSNumber的numberWith…方法。但大家有可能都不 阅读全文
posted @ 2016-07-22 16:59 俊华的博客 阅读(1177) 评论(0) 推荐(0)
摘要:总结: 三类工具 基础工具 (NSLog的方式记录运行时间.) 性能工具.检测各个部分的性能表现,找出性能瓶颈 内存工具.检查内存正确性和内存使用效率 性能工具: 可以衡量CPU的使用,时间的消耗,电池的消耗 一、Time Profile 启动Time Profile:Xcode ——> Produ 阅读全文
posted @ 2016-07-08 12:13 俊华的博客 阅读(4268) 评论(0) 推荐(0)
摘要:static 1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可) 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。 程序的运行结果是: A Hello 为什么在a 阅读全文
posted @ 2016-05-26 14:45 俊华的博客 阅读(747) 评论(0) 推荐(0)