iOS经典面试题
iOS经典面试会问到的一些问题:自己经过半个多月为大家整理出来的,有的答案不是唯一的!
1、 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?
答(1.)内存管理机制
a.引用计数 由于iOS没有垃圾回收机制,ios采用应用计数来确定一个对象是否释放。
b.改变引用计数的操作alloc,retain,release,copy,dealloc等(具体解释看第一题)。yu
c.便利构造器
d.自动释放池 每次对象调用autorelease方法时(obj-c中的正式说法应该是:对象发送autorelease消息),对象的引用计数并不 真正变化 , 而是向pool中添加一条记录,记下对象的这种要求。最后当pool发送drain或release消息时,池中的所有对象的这种要求一一被执行 (即:pool被销毁前,会通知池中的所有对象,全部发送release消息真正将引用计数减少,如果对象之前有发送过autorelease消息)
e.线程 注意当视图退出时,需要关闭自己所开线程
Release -----,alloc 开辟空间 deaclloc销毁空间 .手动调用dealloc的时候会强制将引用计数置为0
readwrite,可读可写,让系统生成setter和getter readonly,只可读,只生成getter
assign引用计数不会+1,适用于基本数据类型.常用于指向储存于静态区的变量以及delegate,直接赋值
retain引用计数+1,获得对象的所有权
copy 复制一个对象,并且储存在不同的内存区.原对象的引用计数不变.遵循NSCoping协议的可以深拷贝
Nonatomic非原子性的,不保证多线程下保护安全 atomic原子性,保证多线程下安全.有一个属性需要多个线程同时访问一个变量,使用atomic能够自动加锁解锁.
Strong,用于ARC模式下,表明对象属于强引用.类似于retain,但是比
retain更加安全,只要对象存在拥有者,就可以引用,不会被释放.只要对象失去了拥有者,立即被抛弃.不必再将已经指向已经释放的对象的指针指向空.避免了野指针.
Weak类似assign,弱引用.应用计数不会增加.释放指针自动置为nil;
2、 类变量@protected ,@private,@public,@package,声明各有什么含义?
通过->的方式访问成员变量
@protected受保护的.该类和所有子类中的方法可以直接访问这样的变量。
@private 变量私有的,该类的方法可以直接访问变量。@public 所有类都可以访问
@package 表示框架内访问,外部无法访问
3、 线程是什么?进程是什么?二者有什么区别和联系?
线程,是进程的一个具体实例.程序运行的最小单位,是被系统独立调度和CPU的基本运行单元.进程是操作系统中可以并行工作的基本单元,一个应用程序有一个进程,一个进程中至少有一个线程.进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程
4、 谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?
在一个进程中有多个线程共同存在,每个线程执行各自的任务,相互之间不会干扰,一个线程可以创建或者撤销其他的线程.让一个进程可以同时执行很多任务.这就减少了等待时间,
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。