(1)Person 是对这个类进行分类
(2)WJPerson 是分类的名字
十一、block 的存储地址
(1)block 可以存储在堆中也是可以存储在栈中的。默认是存储在栈中,如果对 block 经营
一次 copy 操作,block 就会转移到堆中存储。
(2)如果 block 在栈中存储时,block 访问了外部的对象,那么不会对对象进行 retain 操作。
(3)如果 block 在堆中存储,block 访问了外部对象,那么会对外部对象进行一次 retain 操
作。
(4)只要给外部的对象前面加上__block,不管 block 是堆中还是栈中,都不会对对象进行
retain 操作
十二、protocol(协议)和继承的区别
protocol 就是保存一些方法的声明,没有方法的实现。只要遵循了这个协议,就拥有了协议
声明的方法
(1)继承是可以继承父类的方法和实现的。而遵守 protocol 后,只拥有了协议里面的声明
的方法,但没有协议声明方法的实现
(2)相同的类型的类可以使用继承,但是不同的类只能使用 protocol。
(3)protocol 可以用于存储方法的声明,可以将多个类中共同的方法抽取出来,以后让这
些类遵守协议即可,
(遵守了协议的类,就拥有了协议声明的方法)
十三、protocol 的关键字@required @optional 的区别
(1) @required
// 如果声明的方法使用 required 的修饰,说明此方法是必须实现的,如果遵循的类,没有
实现,则会有警告,并且默认声明的方法否是 required 修饰
-(void)palyBaseBall;
@optional
//如果声明的方法使用 optional 修饰,说明此方法可以不实现,遵循协议的类及时不实现此
方法,也不会报警告
-(void)palyBasketBall;
十四、#import 和#include 的区别,@class 代表什么?
import 和#include 指令都是用于包含头文件的,前者是保证只会包含一次,不会重复包含;
后者是 c 语言中原来就有的包含头文件的指令,在 objc 开发中,若是 c 文件,一件会使用
#include 指令来包含头文件,为了防止重复包含,通常会加上条件编译
@class 就是告诉编译器,后面的是一个类。但是无法知道类里面的方法和属性。很好的解
决了引用循环的问题。
十五、nil NULL 和 Nil 的区别
(1)nil 针对对象,指向 OC 中对象的空指针。
(2)Nil 针对类,指向 OC 中类的空指针。