121. 简述Category 在编译过后,是在什么时机与原有的类合并到一起的? ? |
1. 程序启动后,通过编译之后,Runtime 会进行初始化,调用 _objc_init。 2. 然后会 map_images。 3. 接下来调用 map_images_nolock。 4. 再然后就是 read_images,这个方法会读取所有的类的相关信息。 5. 最后是调用 reMethodizeClass:,这个方法是重新方法化的意思。 6. 在 reMethodizeClass: 方法内部会调用 attachCategories: ,这个方法会传入 Class 和 Category ,会将方法列表,协议列表等与原有的类合并。最后加入到 class_rw_t 结构体中。 |
122. 简述 [self class] 与 [super class] ? |
@1. self 是类的隐藏的参数,指向当前调用方法的对象(类也是对象,类对象),另一个隐藏参数是_cmd,代表当前类方法的selector。 |
@2. super并不是隐藏的参数,它只是一个"编译器指示符",super 就是个障眼法,总而言之 |