iOS面试精华:类继承、头文件管理与属性详解

5星 · 超过95%的资源 需积分: 3 25 下载量 156 浏览量 更新于2024-09-09 收藏 120KB DOCX 举报
在iOS面试过程中,面试官可能会考察求职者的Objective-C编程基础和设计模式理解。以下是一些关键知识点的详细解析: 1. **类与继承和Category**: - Objective-C不支持多重继承,因为它采用的是消息传递机制而非传统的类层次结构。但是,可以通过实现多个协议(即接口)来模拟C++中的多重继承行为,每个协议代表一个接口,类可以实现多个协议。 - Category是一种在不改变已有类结构的情况下,向已有类添加新方法或属性的机制。它主要用于扩展功能,但重写类方法时,需注意Category的作用范围仅限于当前Category,不会影响到其他类的实例。 2. **#import与#include的区别**: - `#import`是Objective-C特有的关键字,用于导入头文件,它确保每个文件只被导入一次,避免了多次包含可能带来的重复代码和潜在问题。而`#include`则是C/C++的导入方式。 - `@class`关键字用于声明一个类,允许在头文件中引入类的声明,而推迟到实际使用时加载实现,解决了头文件循环依赖的问题。 - `#import <>`用于导入系统头文件,而`#import ""`用于导入用户自定义的头文件。 3. **属性修饰符的作用**: - `nonatomic`:默认的修饰符,表示setter和getter方法不是原子操作,适用于单线程环境。如果需要多线程安全,应使用`nonatomic, atomic`。 - `nonatomic, retain`:属性为指针类型时,setter方法会保留传入的对象,并将其赋值给实例变量,增加了对象的引用计数。 - `nonatomic, copy`:属性为对象类型时,setter方法会创建一个新对象的副本并赋值,原始对象不受影响。 - `nonatomic, readonly`:只读属性,只提供getter方法,不允许外部直接修改。 - `nonatomic, assign`:属性为指针类型时,setter方法简单地将传入参数赋值给实例变量,不涉及对象的生命周期管理。 4. **setter方法示例**: - 对于`@property (nonatomic, retain) NSString *name`,setter方法实现如下: ```objective-c -(void)setName:(NSString *)str { [str retain]; // 保留新值 [name release]; // 释放旧值 name = str; // 将新值赋给实例变量 } ``` - 对于`@property (nonatomic, copy) NSString *name`,setter方法则稍有不同: ```objective-c -(void)setName:(NSString *)str { name = [str copy]; // 创建新字符串的副本并赋值 } ``` 了解这些知识点,不仅有助于你在iOS面试中表现出扎实的编程基础,而且在日常开发中能更好地管理对象的生命周期和线程安全。