Objective-C底层知识:通知、属性关键字与分类
"这篇文章除了OC底层面试题还包括了通知、属性关键字、分类、扩展和代理(Delegate)的相关知识。" 在iOS开发中,Objective-C(OC)的底层面试题涵盖了多个核心概念,包括如何使用NSNotification进行跨层通信,属性关键字的详细解释,以及类别(Category)、扩展(Extension)和代理模式的应用。 1. **通知(NSNotification)** - 通知是一种基于观察者模式的设计,用于在不同组件之间传递信息。它支持一对多的通信,意味着一个通知可以被多个观察者接收。 - 实现通知机制通常涉及服务提供商向Apple的APNs服务器发送消息和设备令牌,APNs随后将消息推送给对应的设备,最后由设备上的应用程序处理并展示通知。 2. **属性关键字** - **读写权限**:`readonly` 和 `readwrite`,其中`readwrite`是默认的,允许读写操作。 - **原子性**:`atomic` 和 `nonatomic`。`atomic`提供了线程安全的读写,但不是绝对安全,特别是在处理复杂操作时。`nonatomic`效率更高,但不保证线程安全。 - **引用计数**:`retain/strong`、`assign`、`weak` 和 `copy`。 - `retain/strong`会增加对象的引用计数。 - `assign`常用于基本数据类型,修饰对象时可能导致悬垂指针问题。 - `weak`在对象被释放后自动设为`nil`,避免悬垂指针。 - `copy`涉及浅拷贝和深拷贝,浅拷贝复制内存地址,深拷贝复制内容。对于可变与不可变对象,`copy`和`mutableCopy`会有不同的行为。 3. **分类(Category)** - 分类常用于声明私有方法,分割大类文件,或公开框架中的私有方法。 - 分类的特点在于运行时决议,可以为系统类添加新的方法。 4. **扩展(Extension)** - 扩展主要用来声明私有属性和方法,它在编译时决议,通常存在于宿主类的`.m`文件中。 - 扩展不能为系统类添加新的成员变量,只能扩展类的内部结构。 5. **代理(Delegate)** - 代理是一种设计模式,让一个对象代表另一个对象来执行某些任务,通常用于实现对象间的通信。 - 在OC中,定义代理通常使用`@protocol`,然后在类中设置代理属性并遵循协议。 面试中,理解这些基本概念及其用法是至关重要的,它们涉及到代码的性能、线程安全以及不同组件间的协作。例如,对于`NSMutableArray`使用`copy`属性会导致不可变对象,如果尝试进行可变操作,会导致程序崩溃。因此,正确理解和使用这些特性对于编写健壮的iOS应用至关重要。
下载后可阅读完整内容,剩余4页未读,立即下载
- 粉丝: 17
- 资源: 318
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景