活动介绍
file-type

iOS面试精华:#import与#include差异及属性修饰符详解

DOCX文件

下载需积分: 1 | 162KB | 更新于2024-07-20 | 48 浏览量 | 0 下载量 举报 收藏
download 立即下载
iOS常见面试题主要涵盖了编程语言Objective-C中关键概念的深入理解,包括头文件的包含方式、类的声明与导入、以及属性访问修饰符的作用。以下是对这些知识点的详细解析: 1. **#import与#include的区别**: - `#import`是Objective-C预处理器指令,用于在编译时将另一个文件中的类、协议或宏定义引入到当前文件。它不仅包含文件内容,还执行依赖分析,避免同一文件被多次包含(通过`#ifndef`/`#define`/`#endif`结构)。这在大型项目中非常重要,可以防止重复代码和潜在的内存问题。 - `#include`是C/C++语言的包含指令,适用于C标准库或者自定义的C文件,但并不具备Objective-C的依赖管理功能。 2. **@class的作用**: - `@class`是一个声明,用于在接口(.h)文件中声明类名,仅告诉编译器有这样一个类存在,但不会带来类的完整定义。如果在.m文件中还要使用这个类,需要使用`#import`导入类的定义。 3. **属性访问修饰符**: - `readwrite`:生成get和set方法,表示该属性可以读取和修改。 - `readonly`:只生成get方法,属性为只读,不能被修改。 - `assign`:set方法实现简单赋值,适用于非对象类型,如基本数据类型,用于解决循环引用问题。 - `retain`:set方法会先释放旧值再保留新值,适用于对象类型,确保对象生命周期的一致性。 - `copy`:set方法会先释放旧值再复制新值,适用于不可变对象(如NSString和block),防止上下文丢失。 - `nonatomic`:声明属性访问是非原子性的,意味着set方法不会自动加锁,提高了多线程环境下的性能,但可能会导致竞态条件。如果未指定,set和get方法默认为原子性。 4. **setter方法示例**: - 对于`nonatomic,retain`修饰的属性`NSString *name`,setter方法示例如下: ```objective-c @property(nonatomic,retain)NSString*name; -(void)setName:(NSString*)name { if (_name != name) { [_name release]; // 释放旧值 _name = [name retain]; // 保留新值 } } ``` - 对于`nonatomic,copy`修饰的属性,setter类似,只是set方法会调用`copy`方法而不是`retain`,以避免不必要的内存管理。 理解并掌握这些知识点对于iOS开发面试至关重要,因为它们涉及到了Objective-C的基础语法、内存管理和线程同步等方面,这些都是构建高效、可维护的iOS应用所必需的基础知识。

相关推荐

qq_24542665
  • 粉丝: 0
上传资源 快速赚钱