Objective-C底层知识:通知、属性关键字与分类
需积分: 0 139 浏览量
更新于2024-08-05
收藏 224KB PDF 举报
"这篇文章除了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应用至关重要。
2020-03-31 上传
2021-08-20 上传
点击了解资源详情
2021-06-28 上传
2015-03-05 上传
2016-03-15 上传
2019-06-21 上传
2024-08-05 上传
2021-01-03 上传
陌陌的日记
- 粉丝: 18
- 资源: 318
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍