OC 面试问题汇总
OC 问题汇总:
1. 你如何理解 iOS 内存管理
1. new alloc copy retain这些对象我们都要主动的release或者 autorelease
2. 如果是类方法创建的对象,那么系统自动释放池自动在适当的 时候会帮我们 release
3. ARC xcode 自动会帮我们人工智能的添加 release autorelease 操 作
2. C语言里的数组与OC数组的区别
OC 数组是一个对象,有大量的方法,c 没有都需要自己写 C 数组删除是需要后面往前移动,oc 数组自动处理
3. 浅拷贝与深拷贝的区别 或者什么是深拷贝 什么是浅拷贝
copy, mutableCopy
@interface A {
B *b; }
浅拷贝只是拷贝对象本身,不会对里面的子对象进一步拷贝
深拷贝会对子对象以及子对象的子对象进一步拷贝
4. 类别的作用
类别是给已有的类添加方法,但是不能添加变量,匿名类别除外 ()
5. 类别和继承什么区别
类别/类目/Category 很方便给现有类添加方法。但是不能添加成 员变量,匿名类除外,比如可以给 NSString 增加方法,给 UINavigationBar 增加方法,比如 SDWebImage 给 UIImageView 增 加了 setImageWithURL:方法。类别对于使用者很方便
继承可以给现有的类增加方法和成员变量。继承对于使用者来 说不如类别方便 ,比如对 SDWebImage 如果用继承的话,那么就 需要写一个类似于 QFImageView 然后把所有的 UIImageView 改成
QFImageView,这里不如类别方便
6. C 和 OC 有哪些基本数据类型
C char, short, int, struct, union, enum
NSString, nsarray, nsdictionary.
7. 代理和协议什么区别
代理是一种概念,协议是一种技术,代理是用协议来实现的,代理 是 2 个对象之间通讯的一种方式。 代理主要做反向传值的。实现系统的一些回调方法,比如 scrollview 滑动事件,选择照片,asi 网络下载完成等。
iOS 开发和 objective-c 区别
8. 代理和通知中心/广播/NoficationCenter 什么区别
代理主要是反向传值,一般用来 1:1 的两个对象通讯上。
通知中心是通过注册然后接收事件的一种 n:n(多对对) 的方法
9. 解释 const, static, inline 关键字
const 修饰指针,或者常量,比如不可变,
static 修饰变量表示作用域,比如全局的私有变量,函数内部的 static 是内部的私有变量。
Static 修饰函数表示函数是文件作用域
Inline 表示内联。一般来说 inline 需要和 static 联合用 一般用法是 static inline int max(int a, int b) {
return a>b?a:b; }
static inline作用是和宏类似,只不过是方便调试(宏不能断掉调 试,static inline 可以)。运行时候是一样的。
一般 c/c++短小的函数都用 static inline 内联函数
10. OC 里怎么实现多继承
OC 没有多继承。用协议实现多继承,把协议中的方法在实现的类 中重写 C++有多继承,多继承其实用好了很方便。C++多继承很容易出现 二一性比如:
类 A { int a;}
类B: 类A,类C:类A
类D : B, C那么 int a到底是继承自谁的 单继承
11.解释KVC和KVO
Key value coding, Key value observer.
Kvc 是路径访问的规范,kvo 是观察某个变量的变化过程
KVO 可以观察某个对象的变量变化过程,KVC 是满足被观察的编 码规范。
KVC/KVO 类似于代理,通知中心。都是一种通讯方法。
12. 什么是单例模式
单例就是在多个对象之间共享数据,类似于全局变量,比如数据 库打开一次,多个界面都可以使用
13. NSString *name = @”1000phone.com”,[name release]会出现什么 情况
这个代码不满足 objective-c 的内存管理黄金法则。没有 alloc 就
release,
14. 列举所知道的 iOS 的类
15. C/C++和 OC 怎么混用
.m -> .mm
16. 本地存储方式有哪几种
数据库,nsuserdefauts, file , plist,archieve 归档 比较小的就放在 nsuserdefaults(以文件设计的存放在 Libraray 中) 数据库里面适合存放一条一条的记录
file 一般存普通文件,图片,视频,音频等
plist 存放比 nsuserdefaults 大一些的
归档 nsarchieve 可以存对象
17.解释OC里的id类型
id 是泛型指针,可以指向任何 oc 类型,
id =~ NSObject *
id 是 objc_object 的 typedef,执行 Class 对象
18. retain、copy、readonly、readwrite 的区别
retain对计数器+1 copy是创建一个新对象,readonly只产生getter 函数,readwrite 产生 setter, getter 函数
19. copy 是深拷贝还是浅拷贝
copy 缺省是浅拷贝.但是 copy 也可以做成深拷贝
20. copy 和 mutableCopy 区别
copy 是拷贝,mutableCopy 是可变拷贝,比如把 NSString 通过 mutableCopy 变 成 NSMutableString, 把 NSArray 通 过 mutableCopy 变成 NSMutableArray.
NSString -àNSMutableString, NSArrayàNSMutableArray,
NSDictionaryàNSMutableDictionary, NSData->NSMutableData;
21. 怎么实现对象的本地存储
归档 NSArchieve
22. 遍历数组的三种方式有什么区别
for forin iterator
forin 也叫快速循环。为什么他叫快速循环,原因是速度快?为什
么速度快? 可以通过优化提前把 forin 里面的 array 数组数组全部
导入到 cpu cache 中。因为 cache 访问速度把内存快至少 100 倍
23. NSArray, NSDictionary 这些是如何做的?
NSArray 使用链表做的
NSDictionary 使用 hash 表做出来的
24. C++怎么调用 C 的方法
extern “C” int foo(){ };
25. Blocks 语法有什么优点
Blocks 类似于 c 中回调函数,和代理类似的,类似于 java 中的 listener 匿名函数
26. 什么是委托代理模式
委托代理是 2 个对象之间的一种通讯方式。一方使用协议,代理
另外一方实现协议,类似于回调,blocks 等语法。 目的是为了软件设计的低耦合
27. 什么是通知中心
通知中心是多对多的平等的通讯模式。主要用在多个对象之间松 耦合的通讯模式。对象和对象之间通过通知的名字就可以进行关 联通讯。
28.解释关键字static、const、inline、 static inline、volatile
static 修饰变量表示静态变量,根据作用域 不同
extern 和 static 是相反的。
Static 修饰函数是表示函数在本文件有效
Static inline 联合在一起表示内联函数。类似于宏
Const 修饰变量和变量的内容只读
Volatile 表示每次都从内存中真正的读取。主要是用于嵌入式中, 读取硬件。
29. OC 中有私有方法吗?怎么实现
在.m 文件中实现 Category,只是在.m 中方法
30. OC 中有私有成员变量吗?怎么实现
在.m 文件中实现匿名类别 Category
31. 成员变量的作用域有哪几种
@public, @protected, @private
32. 数据库能不能存图片,怎么存?
可以存图片, nsdata 存,但是我们一般不这样存,我们存路径把 图片存在沙盒中。
33. 不同屏幕怎么适配
iphone4, iphone4S 640x960 retina
iphone5, iphone5S, 640x1136
iphone6, iphone6S, 1334x750像素
iphone6 plus 1920x1080像素
iphone6s plus 1920x1080像素
34. 不同版本屏幕旋转怎么适配
35. 内存警告应该怎么做
尽量多的释放内存。把一些内容写到文件中,不要保存在内存中。
36. iOS7, iOS8, iOS9区别
37. NSNotification 是同步还是异步的
是同步的. 如果需要异步 必须使用 NSNotificationQueue 实现