background image
(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 中类的空指针。