iOS面试知识点:深拷贝与浅拷贝、类别与继承、扩展

需积分: 3 12 下载量 109 浏览量 更新于2024-09-14 收藏 9KB TXT 举报
本文主要涵盖了iOS面试中可能会遇到的一些核心知识点,包括浅拷贝与深拷贝的区别、类别(Category)的优势与实现类别与继承的不同、类别与扩展的区别、Objective-C中的协议(Protocol)与Java接口(Interfaces)的对比、以及Key-Value Observing (KVO) 和 Key-Value Coding (KVC)的解释。 1. 浅拷贝与深拷贝的区别: 浅拷贝只复制对象的引用,如果被拷贝的对象内部包含了其他对象的引用,那么它们在拷贝后仍然共享同一块内存区域。这意味着对原对象的任何修改都会反映到拷贝对象上。而深拷贝则会创建一个新的对象,不仅复制原始对象的所有属性,还会递归地复制其内部引用的对象,确保两个对象在内存中是完全独立的。 2. 类别的优势与实现类别与继承的不同: 类别可以向已有的类添加方法,而不影响其他已经使用这个类的代码,这使得代码组织更加灵活。相比于继承,类别不会增加类的实例变量,因此不会改变类的内存布局。此外,类别可以用来分隔代码,比如将私有方法放在类别中。继承则是创建一个新类,并且可以继承父类的属性和方法,同时可以添加自己的属性和方法,适用于扩展或改变原有类的功能。 3. 类别与扩展的区别: 类别可以添加方法,但不能添加实例变量,而扩展(Category without name)可以在编译时为类添加私有方法和实例变量,但不会暴露给外部使用。扩展主要用于隐藏类的实现细节,保持接口的清晰。 4. Objective-C中的协议与Java接口: Objective-C的协议是一种形式化的声明,可以包含方法签名,但不包含实现,可以被多个类遵循。协议可以是正式的(formal)或非正式的(informal),非正式协议通常用于模拟多继承。Java接口则是一种定义方法签名的类型,类可以实现多个接口,但不能包含方法实现,必须在实现类中提供具体实现。 5. Key-Value Observing (KVO) 和 Key-Value Coding (KVC): KVC是Apple提供的一种机制,允许通过字符串键来间接访问对象的属性,无需知道属性的具体名称。它广泛应用于数据绑定和动态设置属性。KVO则是一种观察者模式的实现,可以监听某个对象的属性值变化,当属性值改变时,系统会自动通知所有注册了该属性的观察者。这常用于实时响应对象状态变化的情况,例如界面更新。 这些知识点对于iOS开发者的面试准备非常重要,理解并掌握它们能帮助你在面试中表现出色。