创建常量的问题###
oc中有一些方法是创建常量的,但是具体用哪一种好呢?
- #define macro
- const(const int a = 1 跟 int const a=1 一样都是修饰的a不可变)
- static const
- extern const
- enum (只可以定义integer类型的常量)
const
在标准C中const定义的变量是外连接的,即如果一个编译单元中定义了一个全局const常量,则其在其他编译单元中是可见的,如果其他编译单元也定义了同名const常量就会产生重复定义错误。
比如在 constViewController.m 文件中定义了 const int SONSTTEST = 1;
然后在 ViewController.m中也定义了const int SONSTTEST = 1;而ViewController.m并未引入constViewController.m,编译器也会报错。
把const int SONSTTEST = 1;改为static const int SONSTTEST = 1;就是把const常量标记为对外不可见
/----------指针常量----------/
NSString * const ptr1 = @"AB";
ptr1 = @"A"; //错误,指针不可变,所以ptr1不可变
/----------常量指针---------/
const NSString *ptr1 = @"AB"; (从右往左读,const修饰的是 *ptr1)
ptr1 = @"A"; //正确,*ptr1不可变,ptr1可变
extern
全局的变量
假如其他a类中已经声明了meString,你在另外一个b类中想使用这个变量,可以extern NSString* meString;会得到a类中同样的值.
个人觉得如果使用局部的常量可以在.m中用
static const int a = 1
如果使用全局的常量的话可以使用
extern const, 比如在a类中声明了 meString,在b中引入a.h就可以直接使用meString。 如果没引入的话在b中extern NSString* meString;也能得到a类中同样的值。 所以比较适合属于某一个类中的全局常量,其他类可以直接使用。
如果使用属于整个application的全局常量的话就可以使用
#define macro
网友评论