赞
踩
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协议方法为: |
10、在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么? |
前者 (self.name = _name)是存在内存管理的setter方法赋值, 它会对_name对象进行保留或者拷贝操作 后者(name = _name)是普通赋值 。 |
一般来说,在对象的方法里成员变量和方法都是可以访问的,我们通常会重写Setter方法来执行某些额外的工作。 比如说,外部传一个模型过来,那么我会直接重写Setter方法,当模型传过来时,也就是意味着数据发生了变化,那么视图也需要更新显示,则在赋值新模型的同时也去刷新UI。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。