OC底层面试揭秘:通知机制与属性权限详解

需积分: 0 0 下载量 66 浏览量 更新于2024-08-05 收藏 836KB PDF 举报
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应用程序。