1、简述oc语言的基本特点:
1> oc语言是c语言的一个超集,只是在c的基础之上加上了面向对象(oo)的特性;
2> oc语言与java语言相同都是单继承,这一点与c++语言不同(多继承);
3> oc语言不支持命名空间机制、取而代之是在类名前加前缀;
2、简述#incloude、#import、@class的区别:
1>、#include与#import的区别:#include和#import其效果相同,只是#import不会引起交叉编译,确保头文件只会被导入一次;
2>、#import与@class的区别:#import会包含这个类的所有信息,包括实体变量和方法。@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,不会考虑用到的时候在去告诉你。使用#import编译效率高,防止相互包含的编译的错误!
3、 简述类目的优点和缺点:
1>、优点:不需要通过增加子类的而增加现有类的行为(方法),且类目中的方法与原始类的方法基本没有区别;
2>、缺点:无法向类目添加实例变量。覆盖原始类方法后,原始类的方法没办法调用。
4、 简述内存管理的基本原则:
1>、如果使用alloc、copy(mutableCopy)或者retian一个对象时,需要向他发送一条releas或者autorelease消息。
5、 简述内存管理的基本原则:
1>ARC是Aatomic Refernce Counting的简称,一般称自动引用计数,是iOS 5之后推出的内存管理的新特性。本质上还是使用引用计数来管理对象,只是我们在编写代码时,不需要向对象发送release或者autorelease 方法,也不可以调用delloc方法,编译器会在合适的位置自动给用户生成release(autorelease)消息。GC的全称是garbage collation,内存垃圾回收机制,ARC 比GC性能好。iOS开发只支持MRC 和ARC ,Mac开发支持GC垃圾回收机制,10.8之后弃用了,推荐使用ARC。
6、 深、浅复制的基本概念以及它们的区别:
1>、浅复制:只复制对象本身,不对里面的属性复制。
2>、不仅复制对象本身,对象持有的属性对象也做复制。
7、 内存中的堆和栈的差别:
1>、栈区(stack)由编译器自动分配释放,存放方法(函数)的参数值、局部变量的值等,先进后出;
2>、堆区(heap)一般有程序员分配与释放,不释放会存在内存溢出的情况。
8、 简述定义属性时、什么时候用assign、retain、copy、nonatomic:
1>、assign:普通赋值,一般用于基本数据类型,常见委托设计模式,以此防止循环引用。
2>、retain:保留计数,获得对象的所有权,引用计数在原有基础上加1。
3>、copy:用来复制对象,一般字符串使用copy。
4>、nonatiomic:非原子性访问,不加同步,多线程并发访问会提高性能。
9、strong和weak的区别:
1>strong强引用,weak弱引用。在ARC中,使用strong告诉编译器帮助我们自动插入retain,weak是普通赋值相当于手动管理内存的assign。
10、ARC 存在内存泄露:
1>ARC中如果内存管理不当的话同样存在内存泄漏。例如:ARC中也会循环引用导致内存泄漏。oc对象和core fountain类之间桥接时,内存管理不当也会产生内存泄漏。