Objective-C面试深度解析:多继承、协议、Category与内存管理

4星 · 超过85%的资源 需积分: 10 770 下载量 69 浏览量 更新于2024-09-12 3 收藏 96KB DOCX 举报
"这份资料主要关注iOS面试中的Objective-C(OC)相关问题,涵盖了多继承、Category、协议、属性修饰符、数组类型选择以及预编译头文件(pch)的作用等多个核心知识点。" 1. Objective-C并不支持多继承,但可以通过协议(Protocol)来实现类似的功能,让一个类遵守多个协议,从而实现多接口。Category是OC中的一个重要特性,它允许我们给已有的类添加方法,而无需扩展新的子类。 2. 在OC中,如果需要重写一个类的方法,通常采用继承的方式来实现。因为继承可以保持原有类的所有特性,并在其基础上添加新的功能。然而,使用Category给类添加同名方法会导致原有的方法被隐藏,即在调用时可能会产生混淆。因此,对于重写,继承更为合适,而Category更适合于扩展非重写的功能。 3. 属性修饰符的使用: - `retain`:用于增加对象的引用计数,当设置新的值时,旧值的引用计数会减少,新值的引用计数会增加。setter方法如下: ```objc -(void)setName:(NSString *)name { if (_name != name) { [_name release]; _name = [name retain]; } } ``` - `copy`:创建对象的一个不可变副本,无论原对象是否可变。setter方法如下: ```objc -(void)setName:(NSString *)name { if (_name != name) { [_name release]; _name = [name copy]; } } ``` - `assign`:一般用于基本数据类型或者不涉及内存管理的对象,不改变对象的引用计数。 4. `NSMutableArray`和`NSArray`的区别: - `NSMutableArray`是可变数组,允许添加、删除或替换元素,适合在需要动态调整数组内容的场景中使用。 - `NSArray`是不可变数组,一旦创建就不能修改,适用于保存不需要修改的数据集合。 5. 实现字符串"ILOVECHINA"反串成"CHINALOVEI": ```objc NSString *str = @"ILOVECHINA"; NSMutableString *reversedStr = [NSMutableString stringWithCapacity:str.length]; NSInteger index; for (index = str.length - 1; index >= 0; index--) { [reversedStr appendString:[str substringWithRange:NSMakeRange(index, 1)]]; } NSLog(@"%@", reversedStr); // 输出 "CHINALOVEI" ``` 6. 预编译头文件(`.pch`)的作用: `.pch`文件是预编译头文件,主要用于存放项目中常用且不变的头文件引用。这样在编译项目时,Xcode会预先处理这些头文件,提高编译速度。通常我们会在这里引入系统框架头文件、自定义宏定义等,以减少每次编译时的加载时间。 以上内容详尽解释了iOS面试中关于Objective-C的部分常见问题,包括类的扩展、属性管理、数组选择以及优化编译流程的技巧。这些知识对于iOS开发者来说至关重要,有助于在面试中展现出扎实的基础和对语言特性的理解。