iOS笔试题目解析:头文件导入、属性与类型转换
需积分: 9 104 浏览量
更新于2024-09-12
收藏 100KB DOCX 举报
“iOS笔试题相关的知识点,包括#import与#include的区别,@class的使用,属性关键字的作用,以及Objective-C中setter方法的实现,还有编译时和运行时类型的区分,以及Objective-C与C语言数据类型的不同。”
在iOS笔试题中,常常会涉及到Objective-C语言的基础概念。`#import`和`#include`都是预处理器指令,用于引入头文件。但`#import`比`#include`更智能,它可以避免重复导入同一文件,这在大型项目中能有效防止编译错误。另外,`#import<>`通常用于导入系统库文件,而`#import""`则用于导入自定义的头文件。
`@class`是一个关键字,它用于在不引入整个头文件的情况下声明一个类。这在头文件互相引用时很有用,可以防止循环包含问题。例如,如果你在A.h中需要引用B类,但在A.m中已经包含了B.h,你可以在A.h中使用`@class B`,而不是`#import "B.h"`。
Objective-C中的属性关键字有多种,如`readwrite`、`readonly`、`assign`、`retain`、`copy`和`nonatomic`。`readwrite`默认设置,生成getter和setter方法;`readonly`只生成getter;`assign`适用于基本数据类型,setter只是简单赋值;`retain`用于OC对象,setter执行`release`旧值后再`retain`新值;`copy`常用于`NSString`和`block`,setter会`release`旧值并`copy`新值;`nonatomic`表示非原子性操作,不加锁,提高性能。
对于setter方法的实现,对于`nonatomic,retain`的属性,如`name`,你需要释放旧的`_name`,然后`retain`新的`name`。而对于`nonatomic,copy`的属性,需要先`release`旧的`_name`,然后`copy`新的`name`,确保了对象的副本被正确持有。
在语句`NSString*obj=[[NSData alloc] init];`中,编译时类型为`NSString`,因为这是变量声明的类型。然而,运行时实际创建的是`NSData`类型的实例,这是因为`alloc`和`init`是基于`NSData`的,所以运行时的类型取决于实际的对象。
Objective-C中常见的数据类型包括`NSString`、`NSArray`、`NSDictionary`等,它们都是面向对象的,提供了丰富的功能和安全特性。相比C语言的基本数据类型(如`int`、`float`、`char`),Objective-C的这些数据类型提供了更高级的抽象,能够处理字符串、集合等复杂数据结构,同时也支持方法调用和动态绑定,增加了编程的灵活性和安全性。
505 浏览量
2016-06-20 上传
2015-06-01 上传
2012-09-09 上传
2022-08-04 上传
2022-08-03 上传
2022-08-03 上传
2022-08-03 上传
2013-02-25 上传
qq_32234049
- 粉丝: 0
- 资源: 1
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析