iOS开发面试:OC内存管理与基础概念解析

5星 · 超过95%的资源 需积分: 10 14 下载量 201 浏览量 更新于2024-07-28 收藏 593KB PDF 举报
"iPhone开发面试题及相关知识解析" 在iPhone应用开发面试中,了解Objective-C(OC)的基础概念和内存管理规则至关重要。以下是一些常见的面试问题及其详细解答: 1. OC中,与`alloc`语义相反的方法是`dealloc`,而与`retain`语义相反的方法是`release`。`alloc`用于分配内存并初始化对象,`dealloc`则是用来释放对象占用的内存。`retain`增加对象的引用计数,确保对象在需要时不会被过早销毁,而`release`则减少引用计数。当对象的引用计数变为0时,系统会自动调用`dealloc`释放内存。在上述的`setName:`方法示例中,`retain`和`release`的配合使用确保了正确管理内存,避免内存泄漏。 2. 在一个对象的方法里面,`self.name="object"`与`name="object"`的区别在于调用方式。`self.name`会触发setter方法,即`setName:`,这可能会涉及KVO(Key-Value Observing)、属性的封装性等特性。而`name="object"`则是直接赋值,不经过setter,可能不会执行任何额外的逻辑或检查。 3. `retainCount`是一个表示对象引用计数的属性。然而,尽管可以查询`retainCount`,但通常不建议这样做,因为它在多线程环境下可能不可靠,并且在大多数情况下,开发者只需要关注是否正确使用`retain`、`release`、`autorelease`以及ARC(Automatic Reference Counting)。在ARC环境中,内存管理由编译器自动处理,`retainCount`的使用就更不常见了。 4. `@property`和`@synthesize`:在OC中,`@property`声明属性,提供getter和setter方法的接口。`@synthesize`指令告诉编译器自动生成这些方法。在iOS 6及更高版本中,若不指定其他实现,编译器会默认为每个`@property`生成`@synthesize`。 5. KVC(Key-Value Coding)和KVO:KVC允许以键值对的方式访问对象属性,即使该属性没有公开的getter和setter。KVO允许监听特定属性的变化,当属性值改变时,能自动触发观察者的方法。 6. Category和Extension:Category可以给已有的类添加方法,而不扩展其实例变量。Extension则可以为类添加私有方法和属性,通常用于隐藏实现细节。 7. GCD(Grand Central Dispatch)和Block:GCD是苹果提供的并发编程框架,用于管理线程。Block是一种内联函数,可以作为参数传递,也可以作为返回值,常用于异步操作和GCD。 8. Delegate和Notification:Delegate是对象间通信的一种方式,一个对象(委托方)设置另一个对象(代理方)作为它的委托,代理方需要实现特定的协议方法。Notification则通过NSNotificationCenter进行广播通知,让多个对象可以监听和响应同一个事件。 9. Auto Layout和Size Classes:Auto Layout是iOS中的布局管理系统,定义了视图之间的约束关系,以适应不同屏幕尺寸。Size Classes是UI设计的增强,允许开发者创建适应多种屏幕方向和设备类型的设计。 10. MVC(Model-View-Controller):MVC是iOS应用架构的基础,模型(Model)负责数据管理,视图(View)显示用户界面,控制器(Controller)协调模型和视图之间的交互。 以上是iPhone开发面试中可能遇到的一些关键知识点,理解和掌握这些概念对于面试和实际开发都至关重要。在准备面试时,不仅需要熟悉这些基础,还要关注最新的技术动态,如Swift语言、SwiftUI、 Combine框架等。