美文网首页
OC语言特性相关面试问题

OC语言特性相关面试问题

作者: 骑着毛驴走起来 | 来源:发表于2019-11-01 16:49 被阅读0次

一、分类

1、你用分类都做了哪些事?
(1)、声明私有方法
(2)、分解体积庞大的类文件
(3)、把Framework的私有方法公开
2、特点
(1)、运行时决议(运行时才会添加到宿主类)
(2)、可以为系统类添加分类
3、 分类中都可以添加哪些内容?
(1)、实例方法
(2)、类方法
(3)、协议
(4)、属性(只会生成set、get方法,不会生成成员变量)
4、分类加载调用栈

屏幕快照 2019-10-25 下午2.52.09.png

5、源码分析
(1)、分类添加的方法可以"覆盖"原类方法。
(2)、同名分类方法谁能生效取决于编译顺序。
(3)、名字相同的分类会引起编译报错。

二、关联对象

1、能否给分类添加”成员变量”?

id objc_getAssociatedObject(id object, const void * key)
void objc_setAssociatedObject(id object, const void * key, id value, objc_AssociationPolicy policy)
void objc_removeAssociatedObjects(id object)

2、(关联对象的本质)分类添加的成员变量,添加到成员变量数组里面了吗?
(1)、关联对象由AssociationsManger管理,并在AssociationsHashMap存储。
(2)、所有对象的关联内容都在同一个全局容器中。

屏幕快照 2019-10-25 下午3.21.41.png 屏幕快照 2019-10-25 下午4.01.52.png

3、源码分析

三、扩展

1、一般用扩展做什么?
(1)、声明私有属性
(2)、声明私有方法
(3)、声明私有成员变量
2、特点?
(1)、编译时决议
(2)、只以声明的形式存在,多数情况下寄生于宿主类的.m中。
(3)、不能为系统类添加扩展。

四、代理

1、准确的说是一种软件设计模式。
2、iOS当中以@protocol形式体现。
3、传递方式一对一。
4、工作流程。

屏幕快照 2019-10-25 下午4.33.38.png

5、一般声明为weak,以规避循环引用。

屏幕快照 2019-10-25 下午4.35.06.png

五、通知(NSNotification)

1、特点
(1)、是使用观察者模式来实现的用于跨层传递消息的机制。
(2)、传递方式为一对多。
2、如何实现通知机制?

屏幕快照 2019-10-25 下午4.47.09.png

六、KVO

1、KVO介绍
KVO是Key-value observing的缩写。
KVO是OC对观察者设计模式的又一实现。
Apple使用了 isa 混写 (isa-swizzling) 来实现KVO。

屏幕快照 2019-10-29 下午4.44.37.png

2、特点
使用setter方法改变值,KVO才会生效。
使用setValue: forKey: 改变值,KVO才会生效。
成员变量直接修改,需手动添加KVO才会生效。
3、通过kvc设置value能否生效?为什么
可以,kvc会重写setter方法。
4、通过成员变量直接赋值value能否生效?
不可以。可以在给成员变量赋值前后手动添加 [self willChangeValueForKey: ] 和 [self didChangeValueForKey: ] 。didChangeValueForKey方法会触发KVO回调。

七、KVC

KVC是key-value coding的缩写。
-(id)valueForKey:(NSString *)key
-(void)setValue:(id)value forKey:(NSString *)key
1、-(id)valueForKey:(NSString *)key 介绍

屏幕快照 2019-10-29 下午5.14.29.png 屏幕快照 2019-10-29 下午5.15.42.png 屏幕快照 2019-10-29 下午5.16.45.png

2、-(void)setValue:(id)value forKey:(NSString *)key 介绍

屏幕快照 2019-10-29 下午5.18.26.png

八、属性关键字

1、读写权限 readonly、readwrite(默认)
2、原子性 atomic(默认)、nonatomic。
atomic只能保证赋值和获取是线程安全(成员属性),不能保证操作和访问线程安全。例如NSArray,可以保证赋值和获取对象线程安全,不能保证删除和添加对象线程安全。
3、引用计数
(1)、retain/strong 都用于修饰对象。
(2)、assign/unsafe_unretained
修饰基本数据类型,如int、BOOL等。
修饰对象类型时,不改变其引用计数。
会产生悬垂指针。
(3)、weak
不改变被修饰对象的引用计数。
所指对象在被释放之后会自动置为nil。
(4)、copy
1>、深拷贝、浅拷贝区别
是否开辟了新的内存空间
是否影响了引用计数

2>、

屏幕快照 2019-10-29 下午5.48.33.png

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

3>、copy面试题

屏幕快照 2019-10-29 下午5.52.18.png

OC语言特性面试总结

1、MRC下如何重写retain修饰变量的setter方法?

屏幕快照 2019-10-29 下午5.55.17.png

2、请简述分类实现原理。
3、KVO的实现原理是咋样的?
4、能否为分类添加成员变量?

相关文章

  • OC语言特性相关面试问题

    一、分类 1、你用分类都做了哪些事?(1)、声明私有方法(2)、分解体积庞大的类文件(3)、把Framework的...

  • iOS面试准备之思维导图

    目录 1.UI视图相关面试问题2.Objective-C语言特性相关面试问题3.Runtime相关面试问题4.内存...

  • iOS面试准备之思维导图

    目录 1.UI视图相关面试问题2.Objective-C语言特性相关面试问题3.Runtime相关面试问题4.内存...

  • iOS面试

    目录 UI视图相关 存储相关 OC 语言特性相关 Runtime相关 内存管理相关 Block相关 多线程相关 R...

  • OC语言特性相关

    1. 分类-category 如何使用声明私有方法分解体积庞大的类文件把Framework的私有方法公开等 分类的...

  • 我理解的runtime

    OC Runtime 对OC的理解与特性 OC是一门面向对象语言,既有静态语言的特性(C++),又有动态语言的特性...

  • OC语言特性面试知识

    一、分类(category) 1、在开发过程中分类都可以做哪些事情?a、声明私有方法。b、分解体积庞大的类文件。c...

  • [iOS面试]第2章 Objective-C语言特性相关面试问题

    本文主讲Objective-C语言特性相关面试问题,包括分类、关联对象、扩展、代理、通知、KVO、 KVC、 属性...

  • OC中语言特性相关

    1. 分类 你用分类都做了哪些事? 声明私有方法 分解体积庞大的文件 把framework的私有方法公开 特点 运...

  • 面试题之 OC

    OC语言的特性? ①OC 语言是 C 语言的一个超集,在 C 的基础上添加了面向对象的特性;②OC 语言与 Jav...

网友评论

      本文标题:OC语言特性相关面试问题

      本文链接:https://www.haomeiwen.com/subject/gywsvctx.html