iOS const修饰常量的误区

八点钟学院 2017-01-15 01:42:29

在iOS里,一般的常量建议大家能用const常量的,不要用宏定义。个中理由因为宏定义只是代码替换,而const常量会进行数据类型的判断,减少代码出错的可能性;而且宏定义的用法需要小心谨慎,否则容易出现问题,比如:
#define a 2+10int b = a/2这个时候b的值不是我们想要的6,而是7。
const用来修饰基础常量指针或者对象指针的时候,大家往往搞混,不知道const放在"*"号前和后面的区别,那么我们来看两个例子:

例子一
例子一结果

例子二

例子二结果
上面两个例子就是const在"*"号前和"*"号后的用法,可以看到,当const在"*"号前,也就是例子一里,可以修改指针的指向地址,但不能这样子写:
*b=c;
而当const在"*"号后,也就是例子二里,可以修改指针指向地址的内容,但不能修改指向地址,即不能这样子写:
b=&c;
所以,我们可以得出一个结论,const离什么近,就代表它修饰的是什么!例子一中,const离"*"近,那么const 修饰的是"*b",不能直接对*b进行修改;例子二中,const离b近,那么const修饰的是b,不能直接对b的值进行修改。
那么这个时候,我们来看一个iOS中容易出错的const用法
NSMutableString *const a = [@"八点钟学院" mutableCopy]; [a appendString:@"不错"];NSMutableString const *b = [@"八点钟学院" mutableCopy]; [b appendString:@"不错"];
这两种用法都是可以的,不会报错!但是显然没有达到我们作为常量的目的。为什么呢?因为我们定义的是一个mutable的String.
所以在iOS中定义一个字符串常量,正确的做法是这样的:NSString *const a = @"八点钟学院";
...全文
340 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
不担心 2017-02-27
  • 打赏
  • 举报
回复
他没有问题,只是分享而已
leizh007_IOS 2017-02-27
  • 打赏
  • 举报
回复
那么你的问题是什么呢?

29,029

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧