iOS笔试题详解:包括#import与#include、属性作用等

5星 · 超过95%的资源 需积分: 34 57 下载量 57 浏览量 更新于2024-07-22 收藏 152KB DOCX 举报
"iOS笔试题包含77道题目,涵盖了iOS开发中的基础概念和技术,包括#import与#include的区别、属性的作用、self与实例变量的使用、内存管理以及视图加载的生命周期等关键知识点。" 在iOS开发中,面试和笔试常常会考察开发者对于基本概念的理解和实际应用能力。以下是对这些知识点的详细解释: 1. #import和#include的区别: `#import`是Objective-C中的预处理器指令,主要用于导入头文件。与C/C++中的`#include`类似,但`#import`具有防止重复导入的特性,即同一个头文件只会被导入一次,避免了交叉编译的问题。`#include`则没有这种检查,可能会导致头文件被多次导入,引发错误。 2. readwrite,readonly,assign,retain,copy,nonatomic属性的作用: - `readwrite`:默认属性,表示属性可以读写。 - `readonly`:属性只读,不能设置。 - `assign`:简单赋值,不涉及内存管理,适用于原始类型如int,防止循环引用。 - `retain`:设置新值时,旧值被释放,新值的引用计数加1,用于对象类型,确保对象生命周期的正确管理。 - `copy`:创建对象的副本,先释放旧值,再复制新值并保持引用计数为1,适用于需要保持对象独立性的场景。 - `nonatomic`:非原子性访问,不加锁,提高多线程并发访问的性能。如果不指定,属性默认为原子性访问,即访问时会加锁保证线程安全。 3. 在一个对象的方法里面:`self.name=“object”` 和 `name=”object”` 的区别: - `self.name="object"`:通过`self`调用`setName:`方法,这会触发setter方法,可能涉及到内存管理(如`retain`或`copy`属性)。 - `name="object"`:直接赋值给实例变量,不经过setter,不涉及内存管理。 4. self.name=nil的机制,以及与`[name release]`的区别: - `self.name=nil`:实际上是调用`setName:`方法,将`name`属性设置为`nil`。如果属性是`retain`或`copy`,旧值会被释放。 - `[name release]`:直接释放`name`对象,降低其引用计数。如果引用计数变为0,对象会被销毁。但这并不会改变属性的值,`name`依然指向旧对象的地址,只是对象本身可能已被回收。 5. viewDidLoad和viewDidUnload何时调用: - `viewDidLoad`:当视图控制器的视图从XIB文件加载或通过代码创建后被首次加载时调用。在这里,你可以设置视图的初始状态和加载数据。 - `viewDidUnload`:在低内存情况下,系统可能会卸载视图来释放内存,此时这个方法会被调用。在此方法中,应该释放那些可以在需要时重新创建的视图资源。 这些知识点是iOS开发者必备的基础,深入理解和掌握它们对于编写高效、稳定且内存管理良好的iOS应用至关重要。在面试或笔试中,能够熟练运用这些知识解答问题,可以体现开发者扎实的技术功底。