Objective-C面试关键点:指针与数组深度解析
4星 · 超过85%的资源 需积分: 9 38 浏览量
更新于2024-09-14
1
收藏 28KB DOCX 举报
"Objective-C重要面试题"
面试中关于Objective-C的问题通常涉及到语言的基础概念、内存管理、消息传递、类别(Category)、协议(Protocol)、 Blocks、GCD (Grand Central Dispatch)、KVC (Key-Value Coding) 和 KVO (Key-Value Observing) 等。以下是针对提供的部分内容进行的详细解释:
1. **数组和指针操作**:
在这段代码中,`main()` 函数展示了数组和指针的交互。`*(a+1)` 访问的是 `a` 数组的第二个元素,即 `a[1]`,其值为 2。`&a` 是数组的地址,而 `&a+1` 并非简单的地址加一,因为 `a` 是一个数组,所以地址加一是基于整个数组的大小,即 `5 * sizeof(int)`。因此,`int*ptr=(int*)(&a+1);` 实际上让 `ptr` 指向了 `a[5]`,即数组结尾之后的位置。这里要注意,`ptr` 和 `(&a+1)` 类型不同,前者是 `int*`,后者是 `int(*)[5]`。因此,`ptr-1` 只会减去 `sizeof(int*)` 的值,返回到 `a[4]`,其值为 5。
2. **sizeof 运算符**:
`sizeof` 运算符用于计算变量或数据结构占用的内存大小。在 `Func(char str[100])` 函数中,当数组 `str` 作为参数传入时,它在函数内部实际上被视为指向第一个元素的指针,因此 `sizeof(str)` 返回的是指针的大小,即在32位 Windows NT 下的 4 字节。同样,`malloc(100)` 分配了 100 个字节的内存,但 `sizeof(p)` 仅返回指针 `p` 的大小,也是 4 字节。
3. **Objective-C 方法和指针**:
题目中提到的 `- (void)*getNSString(const NSString* inputString)` 方法看起来有误,因为 Objective-C 方法的返回类型不能是 `void*`。正确的方法声明应该是 `- (NSString*)getNSString:(const NSString*)inputString`。在 `main` 函数中,`getNSString(a)` 应该返回一个新的字符串,然后 `aString` 被设置为此返回值。然而,当前方法实现试图将一个 NSString 对象赋值给方法名,这是不合法的。正确的做法是在方法体中创建并返回新的 NSString 对象。
扩展知识点:
- **Objective-C 的消息传递**:Objective-C 使用消息传递机制,通过 `[receiver message]` 的形式调用方法。
- **ARC (Automatic Reference Counting)**:Objective-C 采用 ARC 进行内存管理,自动跟踪和管理对象的生命周期。
- **类别(Category)**:类别可以扩展已有的类,添加方法而不影响其他代码。
- **协议(Protocol)**:协议定义了一组方法签名,可以被多个类遵循,实现多态性。
- ** Blocks**:Objective-C 支持内联块,可用来定义匿名函数。
- **GCD (Grand Central Dispatch)**:GCD 是苹果的并发编程框架,用于处理多线程和异步任务。
- **KVC 和 KVO**:KVC 允许通过键来访问对象的属性,而无需公开 getter 和 setter。KVO 提供了观察和响应对象属性变化的能力。
在面试中,理解这些核心概念并能正确应用是至关重要的。对于Objective-C开发者来说,深入理解内存管理、面向对象编程以及多线程编程等技术是非常基础且必要的。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2024-02-07 上传
2012-02-22 上传
2022-05-02 上传
2021-09-30 上传
2022-08-08 上传
2023-06-06 上传
北京-AK1
- 粉丝: 47
- 资源: 5
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍