1、category 和 extension 的区别
分类有名字,类扩展没有分类名字,是一种特殊的分类分类只能扩展方法(属性仅仅是声明,并没真正实现),类扩展可以扩展属性、成员变量和方法
2、define 和 const 常量有什么区别?
define 在预处理阶段进行替换,const 常量在编译阶段使用宏不做类型检查,仅仅进行替换,const 常量有数据类型,会执行类型检查define 不能调试,const 常量可以调试
define 定义的常量在替换后运行过程中会不断地占用内存,而 const 定义的常量存储在数据段只有一份 copy,效率更高define 可以定义一些简单的函数,const 不可以
3、block 和 weak 修饰符的区别?
__block 不管是 ARC 还是 MRC 模式下都可以使用,可以修饰对象,也可以修饰基本数据类型__weak 只能在 ARC 模式下使用,只能修饰对象(NSString),不能修饰基本数据类型
block 修饰的对象可以在 block 中被重新赋值,weak 修饰的对象不可以
4、static 关键字的作用
函数(方法)体内 static 变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 它的模块内;在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的 static 成员变量
网友评论