Objective-C底层知识:通知、属性关键字与分类
需积分: 0 174 浏览量
更新于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
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析