OC
Mae_2015
....
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
KVO原理解析和自定义KVO
(1)KVO是基于runtime机制实现的, (2)类A监听类B的一个属性的变化,当B被观察时,系统会在运行期动态创建一个B的子类NSKVONotifying_B, (3)每个类都有一个isa指针指向当前类,B的isa指针会指向派生类NSKVONotifying_B,然后重写被观察的属性的setter方法, (4)键值观察依赖于NSobject的两个方法willChangeValueFo...原创 2018-05-15 15:55:16 · 663 阅读 · 0 评论 -
atomic和nonatomic的关系;@synthesize和@dynamic的关系
atomic,默认是atomic, 两者的区别是:修饰的属性的setter方法和getter方法不同, atomic修饰的属性的setter和getter方法,stomic在setter方法和getter方法设置和取值的时候有一个安全锁保障,比如线程A正在取currentImage的值,线程B和C同时改动currentImage的值,这时BC线程需等A完成后才能操作 但是atomic所说的线...原创 2018-05-16 16:34:11 · 391 阅读 · 0 评论 -
[UIImage imageNamed:@""];[UIImage imageWithContentsOfFile:@""];的区别
[UIImage imageNamed:@”“];有缓存, [UIImage imageWithContentsOfFile:@”“];没有缓存原创 2018-06-25 19:38:35 · 334 阅读 · 0 评论 -
load 和 initialize 方法的区别;
相同点:都是可以自动被调用的,无需手动调用;并且它们的方法实现内部都是有锁的,是线程安全的 不同点: (1)子类不实现load方法,父类的load方法就不会被调用,子类不实现init方法,父类也会调用init方法; (2)load在main函数之前被调用,不是懒加载实现的;init是懒加载,只被执行一次 (3)load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类...原创 2018-06-26 20:12:26 · 821 阅读 · 0 评论 -
CALayer 和 UIView
(1)UIView可以响应点击事件,CALayer不可以响应时间,UIView继承与UIResponder;CALayer继承于NSObject (2)UIView的frame,bounds等都是直接取的layer的, 重写view的layerClass(+号方法),inti,frame,bounds,center方法,重写layer的init,frame,bounds,position,an...原创 2018-06-28 11:56:25 · 258 阅读 · 0 评论 -
runtime(一)------类结构,方法结构,方法缓存等
编写代码--------编译连接---------运行 (1)OC的动态性都是靠runtime的API支撑的。 (2)isa指针 实例对象的isa指针指向类对象,类对象的isa指针指向元类对象,元类对象的isa指针指向根类元类(如何指向请查看) 如图 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全...原创 2018-11-29 19:55:26 · 404 阅读 · 0 评论 -
runtime(二)(消息发送,动态解析,消息转发)
所有的方法调用都转化为objc_msgSend(id object,SEL selector,…); 消息机制:给方法调用者发送消息 objc_msgSend(消息接收者,消息名称); objc_msgSend的执行流程可分为三个阶段: 消息发送,动态方法解析,消息转发。 消息发送阶段: 动态解析阶段 ...原创 2018-11-30 20:35:24 · 458 阅读 · 0 评论 -
isa指针详解
在arm64之前,isa是一个普通的指针,存储着class和meta-class的内存地址 从arm64之后,isa指针变成了一个共用体,还使用位域来存储更多的信息原创 2018-11-28 19:42:08 · 1523 阅读 · 0 评论 -
runtime(四)----API
类 成员变量原创 2018-12-08 19:40:27 · 246 阅读 · 0 评论 -
面试基础问题
(1)如何令自己所写的对象具备拷贝功能 实现NSCopying,NSMtableCopying协议并结合runtime的方法实现赋值 - (instance)copyWithZone:(NSZone *)zone{ id model =[[ [self class] allocWithZone:zone]init]; unsigned int count = 0; ...原创 2018-12-15 17:16:54 · 291 阅读 · 0 评论 -
Block底层原理(一)
(一)block的本质,是一个结构体 (二)捕获变量 第一种:没有参数,在block中打印,无需捕获 void (^block)(void) = ^{ NSLog(@"Hello, World!"); }; 编译成c++代码后(xcrun -sdk phones clang -arch arm64 -rewrite-objc 要编译的文...原创 2018-12-15 22:17:24 · 822 阅读 · 0 评论
分享