Objective-C 基础面试题及详细答案(实战版)_第1页
Objective-C 基础面试题及详细答案(实战版)_第2页
Objective-C 基础面试题及详细答案(实战版)_第3页
Objective-C 基础面试题及详细答案(实战版)_第4页
Objective-C 基础面试题及详细答案(实战版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Objective-C基础面试题及详细答案(实战版)一、基础语法与核心特性1.简述Objective-C的特点,对比C语言有哪些区别?参考答案:Objective-C是在C语言基础上扩展的面向对象编程语言,完全兼容标准C语法,保留了C的所有基础特性。和C语言核心区别有三点:1.编程思想不同:C是面向过程,注重步骤和流程;OC是面向对象,以类、对象、消息传递为核心,代码复用性、扩展性更强。2.语法特性不同:OC新增了类、继承、多态、分类、协议、属性等面向对象特性,支持动态绑定、动态类型,编译和运行时有更强的灵活性。3.内存管理不同:C依赖开发者手动malloc、free管理内存;OC有成熟的引用计数内存管理机制,支持MRC、ARC两种模式,大幅降低内存泄漏风险。2.讲解OC中消息机制的原理,和函数调用有什么区别?参考答案:OC所有的方法调用本质都是消息发送,这是OC最核心的特性。调用[objmethod]时,并不是直接执行函数,而是编译器转化为objc_msgSend函数,给对象发送一条消息。消息执行流程:1.编译器将方法调用转为objc_msgSend(receiver,selector,参数);2.从对象的isa指针找到所属类,遍历方法缓存、方法列表查找对应SEL;3.找到方法实现IMP后执行代码,找不到则进入消息转发流程。和普通C函数调用的区别:C函数调用是静态绑定,编译时就确定函数地址,直接调用,效率高但不灵活;OC消息调用是动态绑定,运行时才确定方法实现,支持方法重写、交换、动态添加方法,灵活性极高。3.什么是SEL、IMP、Method?三者的关系是什么?参考答案:1.SEL(选择器):本质是方法名的字符串标识,只记录方法名称和参数类型,不记录方法实现,同一个类中,方法名相同、参数相同的SEL唯一。2.IMP(方法实现):是函数指针,指向方法具体的代码实现地址,是真正执行的代码逻辑。3.Method:是OC运行时的方法结构体,内部包含SEL、IMP、方法参数、返回值等完整信息,是对一个方法的完整封装。三者关系:类的方法列表中,通过SEL作为key匹配对应的IMP,Method承载了SEL和IMP的对应关系,消息发送时,通过SEL查找对应的IMP来执行代码。二、属性与内存管理(ARC核心)4.@property关键字的作用,以及常用修饰符区别?参考答案:@property用于声明对象属性,编译器会自动帮我们生成对应的成员变量、getter、setter方法,不用手动编写,简化代码开发。常用修饰符分为内存修饰符和访问修饰符:内存修饰符(ARC环境):1.strong:强引用,默认修饰对象类型,持有对象所有权,只要有强引用指向,对象就不会被释放,适用于大部分对象属性。2.weak:弱引用,不持有对象所有权,不会增加引用计数,对象销毁后,指针会自动置空,主要用于解决循环引用(代理、控件引用)。3.copy:拷贝,修饰字符串、数组等不可变对象,赋值时会复制一份新对象,避免原对象修改影响当前属性,防止可变对象篡改数据。4.assign:直接赋值,不做内存管理,修饰基本数据类型(int、float)、枚举、结构体,不能修饰对象,会产生野指针。访问修饰符:1.nonatomic:非原子性,多线程不安全,访问速度快,开发中默认使用;2.atomic:原子性,多线程安全,有锁保护,访问速度慢,极少使用。5.strong、weak、copy实际使用场景分别是什么?参考答案:1.strong:常规对象属性,如UIView、自定义模型、控制器等,需要持有对象,保证生命周期正常使用。2.weak:代理属性、子控件引用、避免循环引用的对象。比如delegate必须用weak,否则控制器无法释放,造成内存泄漏。3.copy:NSString、NSArray、NSDictionary这类集合和字符串属性。比如外界传入NSMutableString,用copy可以固化数据,外部修改可变字符串,不会影响当前属性值。6.什么是循环引用?如何解决?参考答案:当两个对象互相使用strong引用对方时,就会形成循环引用,双方引用计数都无法归零,导致对象无法释放,造成内存泄漏。常见场景:控制器持有自定义View,View的代理又强引用控制器;两个模型互相持有。解决方式:1.一端使用weak修饰引用,打破强引用闭环,最常用、最高效;2.手动在合适时机置空其中一端的引用,适用于复杂层级场景。7.ARC的原理是什么?ARC是编译时机制还是运行时机制?参考答案:ARC是编译时辅助、运行时生效的内存管理机制。编译阶段:编译器会自动分析代码逻辑,在合适的位置插入retain、release、autorelease代码,无需开发者手动书写;运行阶段:程序运行时,依靠插入的内存管理代码,自动管理对象引用计数,完成对象的创建、持有、释放。核心原理:根据变量的作用域和修饰符,精准管理引用计数,变量出作用域自动释放,杜绝手动管理的冗余和失误。三、分类、扩展与协议8.Category(分类)和Extension(扩展)的区别?参考答案:Category分类:1.可以在不修改原有类代码的前提下,给系统类、自定义类新增方法;2.支持跨文件使用,可拆分类的代码,实现功能模块化;3.不能新增成员变量,只能通过运行时关联对象间接添加属性;4.运行时决定方法调用,多个分类重写同一方法,最后编译的分类方法会覆盖之前的。Extension类扩展(匿名分类):1.只能用于当前类.m文件内部,私有使用,不能跨文件;2.可以新增成员变量、私有属性、私有方法;3.编译时生效,是类的一部分,无法重写原有方法;4.主要用于封装私有逻辑,隐藏内部实现。9.协议(Protocol)的作用是什么?@required和@optional区别?参考答案:协议是一套方法规范,只声明方法、不实现方法,用来规范类的行为,实现代码解耦,最典型的应用是代理模式。@required:默认属性,协议方法必须实现,如果遵守协议但未实现,编译器会报警告,是强制规范;@optional:可选方法,遵守协议的类可实现、可不实现,编译器不会告警,多用于可选的回调、拓展功能。四、面向对象特性10.讲解OC中继承、多态、封装的理解和实际应用?参考答案:封装:将属性和方法封装在类内部,隐藏内部实现细节,只暴露对外的接口。比如控件的内部布局逻辑私有,外部只需要调用frame、点击方法,提高代码安全性。继承:子类继承父类的所有属性和方法,复用父类代码,无需重复编写。自定义BaseVC、BaseView就是典型继承应用,统一封装公共逻辑。多态:父类指针指向子类对象,调用方法时优先执行子类重写的实现。核心作用是统一接口、不同子类差异化实现,适配不同业务场景,提升代码扩展性。11.重写(override)和重载(overload)的区别?OC支持重载吗?参考答案:1.重写:子类重新实现父类的同名、同参数方法,覆盖父类逻辑,OC完全支持,是多态的核心;2.重载:同一个类中,方法名相同、参数个数/类型不同的多个方法。OC不支持传统意义的方法重载,因为OC依靠方法名作为SEL唯一标识,方法名一致就判定为同一个方法,无法重载。只能通过修改方法名、增加参数标签实现类似重载的效果。五、运行时基础12.简单介绍OC运行时的常用应用场景?参考答案:运行时是OC动态特性的核心,日常开发常用场景:1.方法交换:拦截系统方法,统一处理逻辑,比如拦截按钮点击、防止重复点击;2.动态添加方法:解决类方法过多、懒加载方法,或者弥补未实现的方法;3.动态关联对象:给分类新增属性,弥补分类不能添加成员变量的缺陷;4.字典转模型:利用运行时遍历类的所有属性,自动赋值,无需手动赋值;5.消息转发:方法找不到时,动态补救,避免程序崩溃。13.消息转发的完整流程是什么?参考答案:当对象无法匹配到消息对应的方法时,会触发三级消息转发,逐级尝试补救,全部失败才会崩溃:1.动态方法解析:调用resolveInstanceMethod,动态添加未实现的方法;2.备用接收者:调用forwardingTargetForSelector,将消息转发给其他能处理的对象;3.完整消息转发:调用methodSignatureForSelector和forwardInvocation,手动修改、转发消息。六、常见易错点14.nil、NULL、NSNull的区别?参考答案:1.nil:指向OC对象的空指针,对象为空时使用,比如NSString*str=nil;2.NULL:指向C指针的空指针,用于C语言结构体、基础指针,比如int*p=NULL;3.NSNull:OC专门的空对象,是一个真实存在的对象,主要用于数组、字典中占位,解决集合不能存nil的问题。15.为什么可变字符串、可变数组必须用copy?用s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论