static:
静态全局变量:使用全局变量的作用域限于当前文件内部,只能内部文件才能访问该全部变量,外部访问不了
静态局部变量:定义在函数体内的,在函数外是不可见的,修饰局部变量保证永远只初始化一遍,在程序的运行中永远一份内存。
例:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
int i= 0 ;
i ++ ;
NSLog(@"---------%ld",i);
}
//不用status修饰的话,永远只会打印1,因为每次点击都会重新初始化一个全新的变量使得i = 0;
//自加之后就会打印结果为1.
//但是如果使用status修饰局部变量i的话,就会让局部变量永远只初始化一次,一份内存。故每点击一次都会i自加1。
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
static int i= 0 ;
i ++ ;
NSLog(@"---------%ld",i);
}
extern:
是一个全局变量,先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
这个单词翻译过来是“外面的、外部的”。顾名思义,它的作用是声明外部全局变量。这里需要特别注意extern只能声明,不能用于实现,而且定义和分配内存都在原来类中。
UIKIT_EXTERN:
就是将函数修饰为兼容以往C编译方式的、具有extern属性(文件外可见性)、public修饰的方法或变量库外仍可见的属性
BOOL
BOOL类型的变量 是1个有符号的char变量.它使用8位的存储空间
typedef signedchar BOOL;
#define YES (BOOL)1
#define NO (BOOL)0
Boolean
typedef unsigned char Boolean;
enumDYLD_BOOL {FALSE,TRUE };
bool
C99标准定义了一个新的关键字_Bool,提供了布尔类型
#define bool _Bool
#define true 1
#define false 0
bool 是int型,bool b 当b!=0 有 b=true
BOOL 是signed char型,BOOL b 当b=1 有 b=YES
Boolean 是char型
nil
nil是指一个不存在的OC对象指针,OC对象指针的空值。NSObject *object = nil;
Nil
Nil是指一个不存在的OC类指针,OC类指针的空值。因为大部分代码中不需要引用class变量,所以Nil并不常用。
Class class = Nil;
NULL
NULL是指C指针的空值。int *point = NULL;
NSNull
NSNull是用于表示空值对象的类。
NSNull经常用于NSArray、NSDictionary等,因为它们不能存储nil值,所以使用NSNull来代替nil。
nil == Nil == Null 所以它们在object-c中是可以通用的。都表示空对象的意思。
[NSNull null]是值为空的对象,和nil、Nil、Null是不等价的。