
app
SuperChaoXu
这个作者很懒,什么都没留下…
展开
-
_ _ block的内存管理
当block在栈上时,并不会对_ _ block变量产生强引用当block被copy到堆时会调用block内部的copy函数copy函数内部会调用_Block_object_assign函数_Block_object_assign函数会对_ _ block变量形成强引用(retain)当block从堆中移除时会调用block内部的dispose函数dispose函数内部会调用_Block_object_dispose函数_Block_object_dispose函数会原创 2022-01-18 18:59:46 · 534 阅读 · 0 评论 -
面试题-Block
block的原理是怎么样的? 本质是什么?封装了函数调用以及调用环境的OC对象__block 的作用是什么? 有什么使用注意点?block的属性修饰符为什么是copy? 使用block有哪些使用注意?block一旦没有进行copy操作,就不会在堆上使用注意:循环引用的问题block在修改NSMutableArray,需不需要添加__block?block本质上也是一个OC对象,它内部也有个isa指针block是封装了函数调用以及函数调用环境的OC对象block的底层结构如原创 2022-01-18 17:48:47 · 165 阅读 · 0 评论 -
思考:如何实现给分类“添加成员变量”? objc_AssociationPolicy的原理
默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但可以通过关联对象来间接实现关联对象提供了以下API添加关联对象void objc_setAssociatedObject(id object, const void * key, id value, objc_AssociationPolicy policy)获得关联对象id objc_getAssociatedObject(id object, const void * key)移除所有的关联对象void ob原创 2022-01-18 12:27:54 · 294 阅读 · 0 评论 -
category的面试题和底层结构
Category的使用场合是什么?Category的实现原理Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息在程序运行的时候,runtime会将Category的数据,合并到类信息中(类对象、元类对象中)Category和Class Extension的区别是什么?Class Extension在编译的时候,它的数据就已经包含在类信息中Category是在运行时,才会将数据合并到类信息中Categ原创 2022-01-18 12:18:33 · 137 阅读 · 0 评论 -
RunLoop对象与线程
iOS中有2套API来访问和使用RunLoop1.Foudation: NSRunLoop2.Core Foudation:CFRunLoopRefNSRunLoop和CFRunLoopRef都代表着RunLoop对象NSRunLoop是基于CFRunLoopRef的一层OC包装CFRunLoopRef是开源的https://opensource.apple.com/tarballs/CF/每条线程都有唯一的一个与之对应的RunLoop对象RunLoop保存在一个全局原创 2022-01-18 11:58:41 · 249 阅读 · 0 评论 -
什么是RunLoop
顾名思义运行循环在程序运行过程中循环做一些事情应用范畴定时器(Timer)、PerformSelectorGCD Async Main Queue事件响应、手势识别、界面刷新网络请求AutoreleasePool如果没有RunLoop如果有了RunLoop...原创 2022-01-18 11:37:29 · 1736 阅读 · 0 评论 -
KVC笔记
KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性常见的API有- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;- (void)setValue:(id)value forKey:(NSString *)key;- (id)valueForKeyPath:(NSString *)keyPath;- (id)valueForKey:(NSString *)key;.原创 2022-01-17 23:26:07 · 1143 阅读 · 0 评论 -
KVO、KVC的面试题
iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类当修改instance对象的属性时,会调用Foudation的_NSSetXXXValueAndNotify函数willChangeValueForKey:父类原来的setterdidChangeValueForKey:内部会触发监听器(Oberser)和监听方法(observeValueForKeyPath:ofObject:原创 2022-01-17 23:20:37 · 644 阅读 · 0 评论 -
KVO的笔记
KVO的全称是Key-Value Observing, 俗称“键值监听”,可以用于监听某个对象属性值的改变未使用KVO监听的对象使用了KVO监听的对象,创建了子类,instance对象的isa指针指向新的子类_NSSet*ValueAndNotify的内部实现调用willChangeValueForKey:调用原来的setter实现调用didChangeValueForKey:didChangeValueForKKey:内部会调用observer的observe.原创 2022-01-17 23:05:06 · 1391 阅读 · 0 评论 -
class、meta-class的本质结构
原创 2022-01-17 21:56:57 · 258 阅读 · 0 评论 -
OC关于isa指针的一些总结
instance的isa指向class当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用class的isa指向meta-class当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用class对象的superclass指针当Student的class要调用Person的类方法时,会先通过isa找到Student的meta-class,然后通过superclass找到Person的meta-class...原创 2022-01-17 21:53:23 · 153 阅读 · 0 评论 -
meta-class的记录
objectMetaClass是NSObject的meta-class对象(元类对象)每个类在内存中有且只有一个meta-class对象meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中存储的信息主要包括isa指针superclass指针类的类方法信息(class method).........原创 2022-01-17 21:47:36 · 123 阅读 · 0 评论 -
Class的记录
objectClass1~objectClass5都是NSObject的class对象(类对象)它们是同一个对象。每个类在内存中有且只有一个class对象class对象在内存中存储的信息主要包括isa指针superclass指针类的属性信息(@property)、类的对象方法信息(insatnce method)类的协议信息(protocol)、类的成员变量信息(ivar).........原创 2022-01-17 21:39:52 · 199 阅读 · 0 评论 -
OC对象的本质
我们平时编写的Objective-C代码,底层实现其实都是C\C++代码Objective-C中的对象,简称OC对象,主要可以分为3种1.instance对象(实例对象)2.class对象(类对象)3.meta-class对象(元类对象)一个NSObject对象占用多少内存?系统分配了16字节给NSObject对象(通过malloc_size函数获得)但NSObject对象内部只使用了8个字节的空间(64bit环境下,可以通过class_get...原创 2022-01-17 21:02:37 · 1162 阅读 · 0 评论 -
synthesize关键字的说明
iOS6之后LLVM编译器引入了property autosynthesis, 即属性自动合成。换句话说,就是编译器会为每个@property添加@synthesze, 如以下形式 :@synthesize propertyName = _propertyName;这行代码会创造一个带下划线的实例变量名,同时使用这个属性生成getter和setter方法。使用@synthesize 只有一个目的-给实例变量起个别名,或者说为同一个变量添加两个名字。如果要阻止自动合成,记得使用@dynamic原创 2021-05-11 17:21:57 · 305 阅读 · 0 评论