OC的语言特性
1.storyboard/xib 和纯代码开发比较
优点: 1.简单直接 2.跳转关系清晰
缺点: 协作冲突 很难做到界面继承和重用 不便于进行模块化管理:搜索困难 影响性能
2.KVO的实现原理
KVO的实现原理为:在我们调用addObserve的时候,会动态生成一个以NSKVONotifying_开头的当前类的一个子类,对象的isa指针就会指向这个中间类,系统会自动生成相应的方法。这个系统生成的子类回去调用对应的setter方法,在这个setter方法的内部,其实就是调用willChangeValueForKey和didChangeValueForKey这俩个方法。然后在didChangeValueForKey方法内部会调用notifyForKey方法来触发observeValueForKeyPath的回调。
3.OC的反射机制
- class反射:通过类名的字符串形式实例化对象
objective-c
Class class = NSClassFromString(@"student");
Student *stu = [[class alloc] init];
Class class =[Student class];
NSString *className = NSStringFromClass(class);2.SEL反射:通过方法名字符串形式实例化方法
objective-c
SEL selector = NSSelectorFromString(@"setName");
[stu performSelector:selector withObject:@"Mike"];
NSStringFromSelector(@selector*(setName:));4.nonatomic和atomic
nonatomic:非原子性,不会为setter方法加锁,非线程安全,适合内存小的移动设备。 atomic:原子性,为setter方法加锁(默认);线程安全,需要消耗大量资源。
5.分类Category(类别)、扩展Extension
分类:分类是对系统类的方法、属性添加(需要使用Runtime关联对象) 分类 > 本类 > 父类 分类中写property只会生成getter/setter方法声明,需要自己去实现
扩展:实际就是在.m文件那实现私有方法和属性
6.多重继承如何实现?
多继承再这里是用protocol委托代理来实现的
