iOS笔试题详解:包括#import与#include、属性作用等
5星 · 超过95%的资源 需积分: 34 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应用至关重要。在面试或笔试中,能够熟练运用这些知识解答问题,可以体现开发者扎实的技术功底。
2016-04-24 上传
2016-06-20 上传
2021-06-20 上传
2021-06-03 上传
2021-06-17 上传
2018-01-26 上传
fearless719
- 粉丝: 1
- 资源: 1
最新资源
- R语言中workflows包的建模工作流程解析
- Vue统计工具项目配置与开发指南
- 基于Spearman相关性的协同过滤推荐引擎分析
- Git基础教程:掌握版本控制精髓
- RISCBoy: 探索开源便携游戏机的设计与实现
- iOS截图功能案例:TKImageView源码分析
- knowhow-shell: 基于脚本自动化作业的完整tty解释器
- 2011版Flash幻灯片管理系统:多格式图片支持
- Khuli-Hawa计划:城市空气质量与噪音水平记录
- D3-charts:轻松定制笛卡尔图表与动态更新功能
- 红酒品质数据集深度分析与应用
- BlueUtils: 经典蓝牙操作全流程封装库的介绍
- Typeout:简化文本到HTML的转换工具介绍与使用
- LeetCode动态规划面试题494解法精讲
- Android开发中RxJava与Retrofit的网络请求封装实践
- React-Webpack沙箱环境搭建与配置指南