1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?
引用计数机制进行内存管理。 dealloc release 因为retain就要销毁 创建就要释放 readwtite : 可读写(设置器和访问器) readonly : 只读(访问器) assign : 只做赋值 retain对应的是release,内存的释放用release. alloc对应的是dealloc,内存的销毁用deallocreadwrite此标记说明属性会被当成读写的,这也是默认属性 readonly此标记说明属性只可以读,也就是不能设置,可以获取。 assign不会使引用计数加1,也就是直接赋值。 retain会使引用计数加1。 copy建立一个索引计数为1的对象,在赋值时使用传入值的一份拷贝。 nonatomic:非原子性访问,多线程并发访问会提高性能。 atomic:原子性访问。 strong:打开ARC时才会使用,相当于retain weak:打开ARC时才会使用,相当于assign,可以把对应的指针变量置为nil
@protected : 受保护的,自己和子类可以调用
@private : 私有的, 只有自己可以调用
@public : 公共的, 全局都可以调用
@package : 本包内使用,跨包不可以
3.线程是什么?进程是什么?二者有什么区别和联系?
线程,有时称为轻量级进程,是被系统独立调度和CPU的基本运行单位。
进程是操作系统中可以并行工作的基本单位。
一个应用程序里至少有一个进程,一个进程里至少有一个线程
4.谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?
在一个进程中有多个线程,每个线程有自己单独的任务
优点: 效率快 缺点: 不安全,耗费资源
有三种:
第一种,使用@synchronized(self)
第二种,使用GCD
第三种,使用NSOperationQueue
5.多线程同步和异步的区别?IOS中如何实现多线程的同步?
一个进程启动的多个不相干线程,它们相互之间关系为异步。
同步的话指的是多线程同时操作一个数据. 这个时候需要对数据添加保护, 这个保护就是线程的同步。
用GCD中的串行队列来解释多线程的同步,也就是队列中的任务
为串行,它们各自对相邻的任务有依赖性,如果任务1不完成,那么任务2就不会开始,这就是同步
6.假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd
char s[7] = "aabcad";
for (int i = 0; i < 7; i++) {
for (int j = i+1; j < 7; j++) {
if ((s[i] == s[j]) && (j != i + 1)) {
s[j] = s[j + 1];
}
}
}
for (int i = 0; i < 5; i++) {
printf("%c", s[i]);
}
7.获取一台设备唯一标识的方法有哪些UIID
UUID
MAC ADDRESS
OPEN UDID
广告标示符
Vindor标示符
8.iOS本地数据存储都有哪几种方式
NSKeyedArchiver(加密形式)
NSUserDefaults
Write写入方式
SQLite3
9.深拷贝和浅拷贝的理解
对一个实例进行深拷贝时当前类需要实现NSCopying协议。
浅拷贝是复制出来一个跟原对象是同一地址的对象,而深拷贝则是复制出 来一个跟源对象不同地址的对象,改变原对象,对新对象没有影响
10.对UIView、UIWindow和CALayer的理解
UIView是用来显示内容的,可以处理用户事件.
CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。
UIView和CALayer是相互依赖的关系。UIView依赖与calayer提供的内容,CALayer依赖uivew提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。总之,UIView来自CALayer,高于CALayer,是CALayer高层实现与封装。UIView的所有特性来源于CALayer支持.
11.简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期
<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"><span style="font-family: arial, 'courier new', courier, 宋体, monospace; line-height: 27px; white-space: pre-wrap; background-color: rgb(240, 240, 240);">进入后台时:</span> </span></span>
<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">- (</span>void<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">)applicationWillResignAct<wbr>ive:(</wbr></span>UIApplication<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"> *)application</span></span>
<span style="font-family: arial, 'courier new', courier, 宋体, monospace; word-wrap: normal; word-break: normal; line-height: 27px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei; white-space: normal;">- (</span><span style="word-wrap: normal; word-break: normal; white-space: normal;">void</span><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei; white-space: normal;">)applicationDidEnterBackg<wbr>round:(</wbr></span><span style="word-wrap: normal; word-break: normal; white-space: normal;">UIApplication</span><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei; white-space: normal;"> *)application</span></span>回到前台
<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="font-size:12px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">- (</span>void<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">)applicationWillEnterForeground:(</span>UIApplication<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"> *)application</span></span></span>
<span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="font-size:12px;"><span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">- (</span>void<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;">)applicationDidBecomeActive:(</span>UIApplication<span style="word-wrap: normal; word-break: normal; line-height: normal; font-family: simHei;"> *)application</span></span></span>12.ViewController 的 alloc,loadView,ViewDidLoad,ViewWillAppear,ViewDidUnload,dealloc,init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作
<span style="word-wrap: normal; word-break: normal; line-height: 30px;"><span style="word-wrap: normal; word-break: normal; line-height: 27px;"><span style="font-size:12px;">alloc申请内存时调用 </span></span></span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"><span style="font-size:12px;">loadView加载视图时调用 </span></span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"><span style="font-size:12px;">ViewDidLoad视图已经加载后调用 </span></span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">ViewWillAppear视图将要出现时调用 </span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"> </span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">ViewDidUnload视图已经加载</span><span style="line-height: 27px; background-color: rgb(240, 240, 240);"><span style="font-size:12px;">但没有加载出来调用 </span></span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">dealloc销毁该视图时调用 </span><span style="font-size:12px; line-height: 27px; background-color: rgb(240, 240, 240);">init视图初始化时候调用</span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:18px;">13.面向对象的三大特征,并作简单的介绍。</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">答:封装、继承、多态</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">封装:将一个实例的所有属性封装到某个类中</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">继承:子类继承父类所有方法和属性</span></span>
<span style="line-height: 24px; text-indent: 28px;"><span style="font-size:12px;">多态:父类指针指向子类对象</span></span>