|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1、简述Object-C的理解与特性?                                                                                                                                                                                                       |
| OC 作为一门 面向对象 的语言,自然具有面向对象的语言特性:封装、继承、多态。 它既具有 静态语言的特性(如C++),又有 动态语言的效率(动态绑定、动态加载等)。                                                                                                                                           |
| 总体来讲,OC确实是一门不错的编程语言,Objective-C 具有相当多的动态特性,表现为三方面: 动态类型(Dynamic typing)、动态绑定(Dynamic binding)和 动态加载(Dynamic loading)。 动态------必须到运行时(run time)才会做的一些事情。                                                                       |
| 动态类型:即运行时再决定对象的类型,这种动态特性在日常的应用中非常常见,简单来说就是id类型。 事实上,由于静态类型的固定性和可预知性,从而使用的更加广泛。 静态类型是强类型,而动态类型属于弱类型,运行时决定接受者。                                                                                                                  |
| 动态绑定:基于动态类型,在某个实例对象被确定后,其类型便被确定了,该对象对应的属性和响应消息也被完全确定。                                                                                                                                                                         |
| 动态加载:根据需求加载所需要的资源,最基本就是不同机型的适配,例如,在Retina设备上加载@2x的图片,而在老一些的普通苹设备上加载原图,让程序在运行时添加代码模块以及其他资源,用户可根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件,可执行代码可以含有和程序运行时整合的新类                                                                             |
|                                                                                                                                                                                                                               |
| 2、Objective-C 中是否支持垃圾回收机制?                                                                                                                                                                                                |
| Objective-C 是支持垃圾回收机制的 (Garbage collection简称GC) , 但是apple的移动终端中 , 是不支持GC的,Mac桌面系统开发中是支持的.                                                                                                                                     |
| 移动终端开发是支持ARC(Automatic Reference Counting的简称), ARC是在 IOS5 之后推出的新技术 , 它与GC的机制是不同的。 我们在编写代码时, 不需要向对象发送release或者autorelease方法, 也不可以调用delloc方法, 编译器会在合适的位置自动给用户生成release消息(autorelease), ARC 的特点是自动引用技术简化了内存管理的难度.                |
|                                                                                                                                                                                                                               |
| 3、OC协议的基本概念和协议中方法默认为什么类型?                                                                                                                                                                                                 |
| Objective-C中的协议是一个方法列表, 且多少有点相关。 它的特点是可以被任何类使用(实现), 但它并不是类(这里我们需要注意), 自身不会实现这样方法, 而是又其他人来实现协议经常用来实现委托对象(委托设计模式)。 如果一个类采用了一个协议, 那么它必须实现协议中必须需要实现的方法, 在协议中的方法默认是必须实现(@required), 添加关键字@optional, 表明一旦采用该协议, 这些"可选"的方法是可以选择不实现的。 |
|                                                                                                                                                                                                                               |
| 4、简述Objective-C中可修改和不可以修改类型?                                                                                                                                                                                              |
| Objective-C中可修改不可修改的集合类,就是可动态添加修改和不可动态添加修改。 比如NSArray和NSMutableArray, 前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间                                                                                                               |
|                                                                                                                                                                                                                               |
| 5、当我们调用一个静态方法时,需要对对象进行 release 吗?                                                                                                                                                                                         |
| 不需要, 静态方法 (类方法) 创建一个对象时, 对象已被放入自动释放池。 在自动释放池被释放时,很有可能被销毁                                                                                                                                                                      |
|                                                                                                                                                                                                                               |
| 6、当我们释放我们的对象时,为什么需要调用[super dealloc]方法,它的位置又是如何的呢?                                                                                                                                                                      |
| 因为子类的某些实例是继承自父类的, 因此需要调用[super dealloc]方法, 来释放父类拥有的实例,其实也就是子类本身的。 一般来说我们优先释放子类拥 有的实例,最后释放父类所拥有的实例                                                                                                                           |
|                                                                                                                                                                                                                               |
| 7、简述static、self、super关键字的作用?                                                                                                                                                                                              |
| 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值.                                                                                                                                                              |
| 在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问.                                                                                                                                                                                  |
| 在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明.                                                                                                                                                                                 |
| 在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝.                                                                                                                                                                                         |
| self: 当前消息的接收者。                                                                                                                                                                                                               |
| super: 向父类发送消息                                                                                                                                                                                                                |
|                                                                                                                                                                                                                               |
| 8、 isMemberOfClass 和 isKindOfClass 联系与区别?                                                                                                                                                                                 |
| +isKindOfClass 类方法是从当前类的isa指向(也就是当前类的元类)开始。沿着superclass继承链查找判断和对比类是否相等。                                                                                                                                                       |
| -isKindOfClass 对象方法从 [self class](当前类)开始,沿着superclass继承链查找判断和对比类是否相等。                                                                                                                                                       |
| +is MemberOfClass 类方法直接判断当前类的isa指向(也就是当前类的元类)和对比类是否相等。                                                                                                                                                                        |
| -isMwemberOfClass 对象方法是直接判断[self class](当前类)和对比类是否相等。                                                                                                                                                                       |
| isKindOfClass和isMemberOfClass的区别 isKindOfClass来确定一个对象是否是一个类的实例,或者是该类祖先类的实例。 isMemberOfClass只能用来判断前者,不能用来判断后者。 isKindOfClass 能检测任何的类都是基于NSObject类这一事实,而isMemberOfClass却不可以。                                                    |
|                                                                                                                                                                                                                               |
| 9、IOS Object-C对象可以被copy的条件?                                                                                                                                                                                               |
| 只有实现了NSCopying和NSMutableCopying协议的类的对象才能被拷贝, 分为不可变拷贝和可变拷贝,具体区别戳这;                                                                                                                                                             |
| NSCopying协议方法为: - (id) copyWithZone:(NSZone *)zone { MyObject *copy = [[[self class] allocWithZone: zone] init]; copy.username = [self.username copyWithZone:zone]; return copy; }                                  |
|                                                                                                                                                                                                                               |
| 10、在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么?                                                                                                                                                                     |
| 前者 (self.name = _name)是存在内存管理的setter方法赋值, 它会对_name对象进行保留或者拷贝操作 后者(name = _name)是普通赋值 。                                                                                                                                |
| 一般来说,在对象的方法里成员变量和方法都是可以访问的,我们通常会重写Setter方法来执行某些额外的工作。 比如说,外部传一个模型过来,那么我会直接重写Setter方法,当模型传过来时,也就是意味着数据发生了变化,那么视图也需要更新显示,则在赋值新模型的同时也去刷新UI。                                                                                      |
|                                                                                                                                                                                                                               |
IOS面试题object-c 1-10
️ 邪神2024-03-10 8:07
相关推荐
AirDroid_cn7 小时前
在 iOS 18 中,如何将锁屏底部的 “手电筒” 替换为其他应用?芝麻开门-新起点13 小时前
Android 和 iOS 系统版本及开发适配2501_9159184114 小时前
iOS描述文件功能解析陈果然DeepVersion15 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(四)汉秋18 小时前
SwiftUI动画之使用 navigationTransition(.zoom) 实现 Hero 动画加油乐1 天前
解决 iOS 端输入框聚焦时页面上移问题电话交换机IPPBX-3CX1 天前
电话交换机软件 3CX iOS 应用 V5.4 Beta 更新初遇你时动了情1 天前
uniapp/flutter中实现苹果IOS 26 毛玻璃效果、跟随滑动放大动画2501_916007472 天前
Fastlane 结合 开心上架(Appuploader)命令行实现跨平台上传发布 iOS App 的完整方案CV大师杨某2 天前
如何在uni-app中禁用iOS橡皮筋效果?