黑马程序员技术交流社区

标题: NSLog 是根据什么输出NSString字符串的 [打印本页]

作者: xiniuniu    时间: 2015-4-30 23:44
标题: NSLog 是根据什么输出NSString字符串的
我们知道NSString是一个字符串类, 这个字符串对象中有一个length属性. length属性存储了字符的个数, NSLog就是根据这个数值的多少来约定输出多少个字符
上代码   (因为有一些类型转换操作在ARC中不允许, 所以要运行以下代码请关闭ARC机制)
  1. int main(int argc, const char * argv[])
  2. {
  3.    
  4.     NSString *str  = @"aaaaaaaa";
  5.     NSString *str1 = @"bbbbbbbb";
  6.     NSString *str2 = @"cccccccc";
  7.    
  8.     NSLog(@"str: %@   length = %ld", str, str.length);
  9.     NSLog(@"str1: %@  length = %ld", str1, str1.length);
  10.     NSLog(@"str2: %@  length = %ld", str2, str2.length);
  11.    
  12.    
  13.     int *p = (int*)str;
  14.     *(p + 6) = 2;
  15.         
  16.     p = (int*)str1;
  17.     *(p + 6) = 3;
  18.         
  19.     p = (int*)str2;
  20.     *(p + 6) = 4;
  21.    
  22.     NSLog(@"str: %@   length = %ld", str, str.length);
  23.     NSLog(@"str1: %@  length = %ld", str1, str1.length);
  24.     NSLog(@"str2: %@  length = %ld", str2, str2.length);
  25.    
  26.     return 0;
  27. }
复制代码

哈哈以上代码会出现如下效果





       每个字符串对象在内存中的首地址加24字节, 就会得到字符串对象_length成员变量的地址.  通过指针修改了这块内存的数值,
当再次调用NSLog时NSLog就会根据我们修改后的数值决定输出多少个字符, 同样 length属性返回的数值也就发生了变化.  
指针是多少的强大和自由啊, 但千万不要乱用哦,




作者: shuizhuqing    时间: 2015-5-1 11:04
涨姿势 类
作者: shenxian88    时间: 2015-5-1 11:27
讲解的挺详细的,受教了
作者: 我是小菜蛋    时间: 2015-5-1 13:00
讲的好,厉害厉害
作者: ydy96315    时间: 2015-5-2 07:06
长长见识~~
作者: 初楠    时间: 2015-5-2 08:04
受教了  
作者: 张三儿    时间: 2015-5-4 08:26
讲解的挺详细的,受教了
作者: wodeheimalife    时间: 2015-5-4 09:12
路过。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2