iOS开发中常常用到#define
进行文本替换,const
修饰数据类型。下面说一下他们的使用细节。git
#define
放在程序开始,在#import
以后,也能够放在其余任何位置,可是必须先定义后引用。\
,用以告诉预处理程序这里存在一个后续。使用
#define
定义的宏可使用#undef
命令取消定义。github
另外说一下NSString const *var
和 NSString * const var
的区别。常常遇到的有objective-c
const NSString *var
NSString const *var // 与上一个意义相同
NSString * const var
复制代码
const NSString *var
和NSString const *var
没有区别。由于NSString
自己就是不可变的,此处的const
没有任何用途。const
右侧的为定义的常量,没法修改。bash
var
不能作任何修改。static NSString * const var; // a
static NSString const * const var; // 与a相同,第一个const没有任何用途
static const NSString * const var; // 与a相同,第一个const没有任何用途
复制代码
var
对象的值不能修改,但能够修改指针指向。static NSString * var; // b
static NSString const * var; // 与b相同,const没有任何用途
static const NSString * var; // 与b相同,const没有任何用途
复制代码
var
对象的值能够改变,指针指向不能改变。static NSMutableString * const var; // c
复制代码
pro648
对象的值和指针均可以改变。static NSMutableString * pro648; // d
复制代码
下面代码表明的是pro648
指针指向地址被改变了,即开始时指向@"a"
,后来指向@"b"
,而不是字符串@"a"
改变了。app
pro648 = @"a";
pro648 = @"b";
复制代码
事实上不能修改
NSString
对象的内容,NSMutableString
对象可使用appendString:
方法修改。spa
若是声明pro648
变量方法是:3d
NSString const *pro648
复制代码
最后pro648
会指向@"b"
。若是声明pro648
变量方法是:指针
NSString * const pro648
复制代码
当尝试为pro648
再次赋值时,即修改其指针指向时,编译器会发出*Can not assign to variable 'var' with const-qualified type 'NSString * const-strong'*的警告。code
参考资料:对象
欢迎更多指正:github.com/pro648/tips…