其他分享
首页 > 其他分享> > iOS面试题---Objective_C语言特性:分类、扩展、代理、通知、KVO、KVC、属性

iOS面试题---Objective_C语言特性:分类、扩展、代理、通知、KVO、KVC、属性

作者:互联网

更多的文章请看-2020iOS面试大全 持续更新!

 

一、分类

学习的圈子特别重要!!

附上一份收集的各大厂面试题(附答案) ! 群文件直接获取
各大厂面试题

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670 进群密码‘博客’,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

 

 

二、扩展

三、代理(Delegate)

  image.png

代理是一种设计模式,以@protocol形式体现,一般是一对一传递。
一般以weak关键词以规避循环引用。

四、通知(NSNotification)
使用观察者模式来实现的用于跨层传递信息的机制。传递方式是一对多的。

五、KVO (Key-value observing)
KVO是观察者模式的另一实现。
使用了isa混写(isa-swizzling)来实现KVO

  image.png

使用setter方法改变值KVO会生效,使用setValue:forKey即KVC改变值KVO也会生效,因为KVC会去调用setter方法

 
- (void)setValue:(id)value
{
    [self willChangeValueForKey:@"key"];
    
    [super setValue:value];
    
    [self didChangeValueForKey:@"key"];
}
复制代码

六、KVC(Key-value coding)

 
-(id)valueForKey:(NSString *)key;

-(void)setValue:(id)value forKey:(NSString *)key;
复制代码

KVC就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。很多高级的iOS开发技巧都是基于KVC实现的

 

当调用setValue:属性值 forKey:@”name“的代码时,,底层的执行机制如下:

 

即如果没有找到Set<Key>方法的话,会按照_key,_iskey,key,iskey的顺序搜索成员并进行赋值操作。

如果开发者想让这个类禁用KVC,那么重写+ (BOOL)accessInstanceVariablesDirectly方法让其返回NO即可,这样的话如果KVC没有找到set<Key>:属性名时,会直接用setValue:forUndefinedKey:方法。

 

当调用valueForKey:@”name“的代码时,KVC对key的搜索方式不同于setValue:属性值 forKey:@”name“,其搜索方式如下:

 

七、属性关键字
1.读写权限:readonly,readwrite(默认)
2.原子性: atomic(默认),nonatomic。atomic读写线程安全,但效率低,而且不是绝对的安全,比如如果修饰的是数组,那么对数组的读写是安全的,但如果是操作数组进行添加移除其中对象的还,就不保证安全了。
3.引用计数:

  image.png

可变对象的copy和mutableCopy都是深拷贝
不可变对象的copy是浅拷贝,mutableCopy是深拷贝
copy方法返回的都是不可变对象

更多的文章请看-2020iOS面试大全 持续更新!

学习的圈子特别重要!!

附上一份收集的各大厂面试题(附答案) ! 群文件直接获取
各大厂面试题

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670 进群密码‘博客’,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

 

 

 

标签:面试题,setValue,KVC,对象,KVO,调用,方法,变量
来源: https://www.cnblogs.com/IOSkf/p/12869132.html