1.请写出ARC 的中英文全称
答:ARC(Automatic Reference Counting) 自动引用计数
2.内存管理的原则是什么?
答:只要出现new,alloc,copy,retain,就要配对release操作,或者autorelease操作
3.什么时候对象内存计数器会增加?
答:当进行alloc、copy、mutableCopy、retain
4.创建一个对象需要经过那三个步骤?
答:
1.开辟内存空间
2.初始化参数
3.返回内存地址值。
5. .什么是野指针?什么是僵尸对象?什么是空指针?
答:野指针错误:访问了一块坏的内存(已经被回收的,不可用的内存)。
僵尸对象:所占内存已经被回收的对象,僵尸对象不能再被使用。(打开僵尸对象检测)
空指针:没有指向任何东西的指针(存储的东西是0,null,nil),给空指针发送消息不会报错
6. Set方法的作用是什么?Set方法的好处?
答:Set方法的作用:为外界提供一个设置成员变量值的方法。
Set方法的好处:
(1)不让数据暴露在外,保证了数据的安全性
(2)对设置的数据进行过滤
7. Get方法的作用是什么?
答:Get方法的作用:为调用者返回对象内部的成员变量
8. 结构体当中能定义oc对象吗?
答:
不能, 因为结构体当中只能是类型的声明不能进行分配空间
9.什么是构造方法,使用构造方法有什么注意点。
答:
什么是构造方法:构造方法是对象初始化并返回对象一个实例的一个方法。
构造方法有什么用: 一般在构造方法里 对类进行一些初始化操作
注意点:方法开头必须以init开头,接下来名称要大写 例如 initWithName ,initLayout
10.请说明NSSet、NSArray、NSDictionary的区别?
答:NSSet、NSArray、NSDictionary都是属于不可变集合类(在创建完集合类后就不能够对他们进行修改),在集合类里只能添加对象元素不能添加基本数据类型。
NSSet :
1.是一个无序的集合
2.在内存中存储的地址是不连续的
3.并且添加进去的元素是不可重复的
NSArray
1.是一个有序的集合
2.在内存中存储的地址是连续的,添加的元素是可重复的
3. NSArray支持通过下标访问元素。
4. 如果想知道一个元素是否存在这个数组当中的话,那么需要遍历整个数组一个个去判断,这样显然效率低下。
NSDictionary
1.是一个无序的集合
2.它的数据存储方式是key value 键值对的方式进行存储的
3.key 在整个NSDictionary 里是唯一的,如果key发生重复,那么后添加的元素会覆盖之前的。
数组数据结构,查询快,插入慢。每次插入一个元素,后边所有角标+1。
链表数据结构,查询慢,插入快,手拉手询问形式。
11.请说明 #include、#import @class各自的作用
答:
#include :是C语言的预编译指令 告诉编译器导入相关的头文件 ,在OC 当中也能使用 因为OC 兼容C语法
#import : 是GCC编译器提供 不管在一个文件中出现多少次,可保证头文件只被包含一次
@class :告诉编译器当前这个文件中 声明了这个类,但是类里面具体定义什么不知道,使用它能减少编译时间。
12.点语法本质是什么,写一个点语法的例子,并写上注释
答: 点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。
例如有一个Person类 通过@property定义了name和age属性,再提供了一个run方法。
Person *person = [Person new];
person.name=@”itcast”;//调用了person的setName方法int age = person.age; // 调用了person的age方法
person.run //调用了person的run方法
13.@property 有什么作用
答:1.让编译器自动生成与类成员变量相同名getter setter方法。
2.创建的成员变量是以_开头 它创建的默认修饰域是private。
3.还能对对象内存进行管理。
14.调用对象的release 方法会销毁对象吗?
答:不会,调用对象的release 方法只是将对象的引用计数器-1,当对象的引用计数器为0的时候会调用了对象的dealloc 方法才能进行释放对象的内存。
15.请说明自动释放池autorelease的作用,和工作机制,它与release有什么不同?
答:自动释放池:添加到该池中的对象在作用域结束时,会自动释放池中所有对象的内存。
autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减1。
16.请简述什么是协议?
答: 类似于Java语言里的接口,在协议里只能定义方法不能定义属性,并且在协议里写的方法都是公开抽象的,需要具体的类去遵循这个协议实现协议里的方法。在协议里定义的方法可以是可选实现和必须实现的,默认是可选的。
17.id类型是什么,instancetype是什么,有什么区别?
答:id类型:万能指针,能作为参数,方法的返回类型。
instancetype:只能作为方法的范围类型,并且返回的类型是当前定义类的类类型。
18.成员变量名的命名以下划线开头的好处?
答:(1)与get方法的方法名区分开来;
(2)可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。
19.Self的用途是什么?
答:(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)
(2)[self 方法名];可以调用其他的对象方法或者是类方法
20. Super关键字的作用?
答:
Super关键字的作用:
(1)直接调用父类中的某一个方法
(2)Super处在对象方法中,那么就会调用父类的对象方法;super处于类方法中,那么就会调用父类的类方法。