常量的定义到底该怎么写?

无敌鲨鱼炮
  • 448

下面三种定义常量的写法有什么区别?

static const NSString *CQAddressCellReuseID1 = @"CQAddressCellReuseID1";
static NSString * const CQAddressCellReuseID2 = @"CQAddressCellReuseID2";
const static NSString *CQAddressCellReuseID3 = @"CQAddressCellReuseID3";

你们定义cell的复用id是怎么定义的?

回复
阅读 2.1k
5 个回答

以前总结过一次

1.const NSString *coder = @"Hello world!";
2.NSString const *coder = @"Hello world!";
3.NSString * const coder = @"Hello world!";

1.const NSString *coder = @"Hello world!";
" *coder "不能被修改, "coder"能被修改

2.NSString const *coder = @"Hello world!";
" *coder "不能被修改, "coder"能被修改

3.NSString * const coder = @"Hello world!";
"coder"不能被修改," *coder "能被修改

注意:1和2其实没什么区别

结论:const右边的总不能被修改

static定义静态变量,只初始化一次,直到程序销毁时才释放,即为该变量分配的空间在整个程序的执行期内都始终存在;声明外部变量,该变量的作用只限于本文件模块。
extern定义外部变量,作为类的拓展供其他外部类访问;也可作为传值使用。

所以正确的写法应该是 static NSString * const coder = @"Hello world!";
然后使用 extern 关键字,在其他的文件中 extern NSString * const coder;
这样你就无需知道 coder的具体值 而 直接使用这个变量

CQAddressCellReuseID1和CQAddressCellReuseID3是一样的,指针不可变;CQAddressCellReuseID2是指针内容不可变。定义cell的id应该用CQAddressCellReuseID2这种吧。

    CQAddressCellReuseID1 = @"x";
    CQAddressCellReuseID2 = @"x";
    CQAddressCellReuseID3 = @"x";

2报错,用const是为了不会被修改值吧。const修饰指针,表示指针不可指向新的值,1和3这种是不能进行*p = newValue这种操作,OC里一般不这么搞。

我觉得简单起见,用static就好了。

const*前面, 表示变量的值不可变, 指针地址可变;
const*后面, 表示变量的值可变, 指针地址不可变;


总结为: const后面的变量(*CQAddressCellReuseID1)或者指针(CQAddressCellReuseID1)是不可变的; 一般都是把const写在*后面,可以参考Apple API.

clipboard.png

clipboard.png

const 修饰谁(在谁前面),谁就不可变;
1、3是 ‘NSString *’即类型不可变
2 是 CQAddressCellReuseID2 指向不能变

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏