么?
1.不能向编译后得到的类增加实例变量
2.能向运⾏时创建的类中添加实例变量
解释:
1.编译后的类已经注册在runtime中,类结构体中的objc_ivar_list实例变量的链表和instance_size实例变量的内存⼤⼩已
经确定,runtime会调⽤class_tvarlayout或class_tWeaklvarLayout来处理strong weak引⽤.所以不能向存在的类中添加实例变量
2.运⾏时创建的类是可以添加实例变量,调⽤class_addIvar函数.但是的在调⽤objc_allocateClassPair之
后,objc_registerClassPair之前,原因同上.
5.r untim e如何实现w ea k变量的⾃动置nil?
5.runtim
我为自己代言runtime 对注册的类, 会进⾏布局,对于 weak 对象会放⼊⼀个 hash 表中。 ⽤ weak 指向的对象内存地址作为 key,当此对象的引⽤计数为0的时候会 dealloc,假如 weak 指向的对象内存地址是a,那么就会以a为键, 在这个 weak 表中搜索,找到所有以a为键的 weak 对象,从⽽设置为 nil。
6.给类添加⼀个属性后,在类结构体⾥哪些元素会发⽣变化?
instance_size :实例的内存⼤⼩
objc_ivar_list *ivars:属性列表
RunLoop
1.r unlo o p是来做什么的?runlo o p和线程有什么关系?主线程默认开启了r unlo o p么?⼦1.runlo p和线程有什么关系?主线程默认开启了runlo北苏丹王国
线程呢?
师徒小说runloop:字⾯意思就是跑圈,其实也就是⼀个循环跑圈,⽤来处理线程⾥⾯的事件和消息。
辣椒叶
runloop和线程的关系:每个线程如果想继续运⾏,不被释放,就必须有⼀个runloop来不停的跑圈,以来处理线程⾥⾯的各个事件和消息。
主线程默认是开启⼀个runloop。也就是这个runloop才能保证我们程序正常的运⾏。⼦线程是默认没有开始runloop的
2.runlo de是⽤来做什么的?有⼏种mo
2.r unlo o p的m o de是⽤来做什么的?有⼏种m o de?
model:是runloop⾥⾯的模式,不同的模式下的runloop处理的事件和消息有⼀定的差别。
系统默认注册了5个Mode:
(1)kCFRunLoopDefaultMode: App的默认 Mode,通常主线程是在这个 Mode 下运⾏的。
(2)UITrackingRunLoopMode: 界⾯跟踪 Mode,⽤于 ScrollView 追踪触摸滑动,保证界⾯滑动时不受其他 Mode 影响。
(3)UIInitializationRunLoopMode: 在刚启动 App 时第进⼊的第⼀个 Mode,启动完成后就不再使⽤。
(4)GSEventReceiveRunLoopMode: 接受系统事件的内部 Mode,通常⽤不到。
(5)kCFRunLoopCommonModes: 这是⼀个占位的 Mode,没有实际作⽤。
注意iOS 对以上5中model进⾏了封装
NSDefaultRunLoopMode;
NSRunLoopCommonModes
3.为什么把N STim er对象以
N SDefa ultR unLo o pMo de(k CFR unLo o pDefa ultMo de)添加到主运⾏循环以后,滑ro STim er却不动了?
动sc r o llview的时候N STimer却不动了?
nstime对象是在 NSDefaultRunLoopMode下⾯调⽤消息的,但是当我们滑动scrollview的时候,NSDefaultRunLoopMode模式就⾃动切换到UITrackingRunLoopMode模式下⾯,却不可以继续响应nstime发送的消息。所以如果想在滑动scrollview的情况下⾯还调⽤nstime的消息,我们可以把nsrunloop的模式更改为NSRunLoopCommonModes
4.苹果是如何实现Auto r elea Po o l的?
Autorelea Pool作⽤:缓存池,可以避免我们经常写rela的⼀种⽅式。其实就是延迟relea,将创建的对象,添加到最近的autoreleaPool中,等到autoreleaPool作⽤域结束的时候,会将⾥⾯所有的对象的引⽤计数器-1.
autorelea
类结构
1.isa指针?(对象的isa,类对象的isa,元类的isa都要说)
在oc中,类也是对象,所属元类。所以经常说:万物皆对象
对象的isa指针指向所属的类
三年级开学手抄报
类的isa指针指向了所属的元类大学生调研报告
元类的isa指向了根元类,根元类指向了⾃⼰。
[图⽚上传失败...(image-b10fe8-1615972432632)]眼睛怎么读英语
2.类⽅法和实例⽅法有什么区别?
调⽤的⽅式不同,类⽅法必须使⽤类调⽤,在⽅法⾥⾯不能调⽤属性,类⽅法⾥⾯也必须调⽤类⽅法。存储在元类结构体⾥⾯的methodLists⾥⾯
实例⽅法必须使⽤实例对象调⽤,可以在实例⽅法⾥⾯使⽤属性,实例⽅法也必须调⽤实例⽅法。存储在类结构体⾥⾯的methodLists⾥⾯
3.介绍⼀下分类,能⽤分类做什么?内部是如何实现的?它为什么会覆盖掉原来的⽅法?
朝花夕拾第一篇