const
三种使用 const 的方式
const NSMutableString * constString = @"constString".mutableCopy;
NSMutableString const * stringConst = @"stringConst".mutableCopy;
NSMutableString * const string_const = @"string_const".mutableCopy;
给它们赋值,也就是改变指针 地址
constString = @"newConstString".mutableCopy; //const 不管在 NSMutableString 前后是一样的东西
stringConst = @"newStringConst".mutableCopy;
//string_const = @"newString_const".mutableCopy; //报错 const 和 指针在一起时指针不可以指向新的地址,也就是常量指针
这里没有预料中的 直接报红 也没报黄
[constString stringByAppendingString:@"_new"];
[stringConst stringByAppendingString:@"_new"];
//但是打印出来的值 是: ---constString = newConstString -- stringConst = newStringCon 值没有被改变,也就是 值是常量
NSLog(@" ---constString = %@ -- stringConst = %@",constString,stringConst);
//总结:const 在 NSMutableString 旁边,那么就是指针指向的值是常量,改变值不会报错,但是不会有效果。
// const 在 指针 旁边,那么改指针就是常量指针,不可以重新赋值。
//如果 要 常量指针 指向 常量 那么 :
const NSMutableString * const const__constString = @"const__constString".mutableCopy;
//或者
NSMutableString const * const const_constString = @"const_constString".mutableCopy;
static
//static 在 创建的时候 不能赋值给 一个 不是编译的常数
//只可以 赋值 这样的
static int a = 1;
static char b = '6';
static char c[3] = "122";
static char * d = "233";
static NSString * e = @"233";
static const NSString * static_constString_new = @"23333";//这样 也可以 我已经晕了
// static ViewController * mySelf = [[ViewController alloc] init]; // 这样就不行了
// static const ViewController * mySelf = [[ViewController alloc] init]; //nonono
// static const NSMutableString * static_constString = @"2333".mutableCopy; //这样是不行的
// static const NSString * static_constString_new_new = [NSString new]; //这样也不行
//总之 好像 就能赋值给 一个 常量
关于 static 的一点 ,它在 app 的生命周期 只执行一次,下一次如果跑到了 这里,那么这句 初始化的 代码就被直接跳过了
//先 测试 const 和 NSMutableString 在一起 指针指向 常量
static const NSMutableString * static_constString = nil;
const static NSMutableString * const_staticString = nil;
const NSMutableString static * const__staticString = nil; //这三种方式 猜测是一样的
// const NSMutableString * static const_string_static = nil; 这样干爆红了
static_constString = @"static_constString".mutableCopy;
const_staticString = @"const_staticString".mutableCopy;
const__staticString = @"const__staticString".mutableCopy;
// 打印 结果
// static_constString = static_constString
// const_staticString = const_staticString
// const__staticString = const__staticString
NSLog(@"static_constString = %@ \n const_staticString = %@ \n const__staticString = %@",static_constString,const_staticString,const__staticString);
static_constString = @"static_constString_new".mutableCopy;
const_staticString = @"const_staticString_new".mutableCopy;
const__staticString = @"const__staticString_new".mutableCopy;
// 打印 结果
// static_constString = static_constString_new
// const_staticString = const_staticString_new
// const__staticString = const__staticString_new
NSLog(@"static_constString = %@ \n const_staticString = %@ \n const__staticString = %@",static_constString,const_staticString,const__staticString);
[static_constString stringByAppendingString:@"++ new"];
[const_staticString stringByAppendingString:@"++ new"];
[const__staticString stringByAppendingString:@"++ new"];
// 打印 结果
// static_constString = static_constString_new
// const_staticString = const_staticString_new
// const__staticString = const__staticString_new
NSLog(@"static_constString = %@ \n const_staticString = %@ \n const__staticString = %@",static_constString,const_staticString,const__staticString);
结论: 加了 static 对 const 和 NSMutableString 在一起的,指针指向常量这种东西 没影响,依然可以正常赋值,并且不能改变值,但是 用了 static 后,这个指针会被 存入 静态区
NSMutableString static * const static_xing_constString = nil;
static NSMutableString * const static__constString = nil;
//预料之中的 警告了
// static_xing_constString = @"static_xing_constString".mutableCopy;
// static__constString = @"static__constString".mutableCopy;
[static_xing_constString stringByAppendingString:@"static_xing_constString"];
[static__constString stringByAppendingString:@"static_xing_constString"];
//因为是 nil 所以。。。
NSLog(@"static_xing_constString = %@ \n static__constString = %@",static_xing_constString,static__constString);
//这样 写 好像 没用了, 初始化的时候 不能赋值,完了 还不能改,一辈子 都是 nil