OC底层面试揭秘:通知机制与属性权限详解
OC (Objective-C) 是一种面向对象的编程语言,广泛应用于iOS开发中。本文档主要探讨了iOS开发中的几个关键概念,包括通知机制、属性关键字以及分类、扩展和代理的使用。 1. 通知机制: - iOS 使用观察者模式实现通知功能,用于跨层通信,允许应用服务提供商与苹果的推送服务APNs(Apple Push Notification Service)交互。当服务器有新消息时,会通过APNs找到注册的设备,并将消息推送给它们。客户端设备接收消息后,将消息传递给相应的应用程序,应用程序根据用户的设置显示通知。 2. 属性关键字: - 属性提供了控制访问权限和内存管理的方式: - `readonly` 和 `readwrite` 分别表示只读和可读写,后者为默认。 - `atomic` 和 `nonatomic` 关键字用于确保线程安全,`atomic` 提供更严格的同步,但可能导致性能损失。 - `retain` 或 `strong` 控制对象所有权,`strong` 是默认,可能导致循环引用和内存泄漏。 - `assign` 用于基本数据类型,对象类型易产生悬垂指针,需谨慎使用。 - `weak` 是无主弱引用,不会增加对象的引用计数,对象释放后指针会自动置为 `nil`。 - `copy` 用于创建副本,`浅拷贝` 指的是内存地址的复制,而 `深拷贝` 则是对对象内容的完整复制,`mutableCopy` 对可变对象执行深拷贝,`copy` 对不可变对象执行浅拷贝。 3. 分类与扩展: - 分类(Category)在运行时添加到已有类的方法和属性,常用于隐藏私有方法或者为系统类提供扩展功能,但编译时不能为系统类添加扩展。 - 特点是运行时决议,即分类是在程序运行时动态添加的,增强了代码的灵活性和封装性。 4. 代理(Delegate): - 代理模式用于处理对象之间的协作,通常一个对象(委托者)委托另一个对象(代理)处理某些任务。在iOS中,如UITableView的DataSource和Delegate就是典型的代理使用例子,它允许你定义特定行为并将其委派给响应的代理对象。 总结来说,OC底层面试题主要考察面试者对iOS开发中核心机制的理解,包括通知机制的运用、属性管理的策略以及面向对象设计中的分类和代理概念。理解这些基础知识对于iOS开发者来说至关重要,它们涉及到内存管理、通信架构和代码组织等多个层面。掌握这些知识点有助于编写高效、健壮的iOS应用程序。
![](https://csdnimg.cn/release/download_crawler_static/86319123/bg1.jpg)
下载后可阅读完整内容,剩余4页未读,立即下载
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/02f9d88c8fb746b58bed39845a9a5234_weixin_35805055.jpg!1)
- 粉丝: 33
- 资源: 299
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 解决本地连接丢失无法上网的问题
- BIOS报警声音解析:故障原因与解决方法
- 广义均值移动跟踪算法在视频目标跟踪中的应用研究
- C++Builder快捷键大全:高效编程的秘密武器
- 网页制作入门:常用代码详解
- TX2440A开发板网络远程监控系统移植教程:易搭建与通用解决方案
- WebLogic10虚拟内存配置详解与优化技巧
- C#网络编程深度解析:Socket基础与应用
- 掌握Struts1:Java MVC轻量级框架详解
- 20个必备CSS代码段提升Web开发效率
- CSS样式大全:字体、文本、列表样式详解
- Proteus元件库大全:从基础到高级组件
- 74HC08芯片:高速CMOS四输入与门详细资料
- C#获取当前路径的多种方法详解
- 修复MySQL乱码问题:设置字符集为GB2312
- C语言的诞生与演进:从汇编到系统编程的革命
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)