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