oc字符串存储位置

来源:互联网 发布:js 数组包含对象 编辑:程序博客网 时间:2024/05/16 09:45

   以下实验在MRC与ARC下结果相同:


    NSString *str1 = @"abc";

    NSString *str2 = [NSStringstringWithString:@"abc"];

    NSString *str3 = [[NSStringalloc] initWithString:@"abc"];

    

    NSLog(@"_______ %p %p %p",str1,str2,str3);

   

   结果:

   2016-12-27 13:47:33.018 helloTest[1720:74271] _______ 0x10b725310 0x10b725310 0x10b725310

   结论:存储在常量区,且位置相同,只有一份拷贝

 

    

    NSString *str4 = [NSStringstringWithFormat:@"abc"];

    NSString *str5 = [[NSStringalloc] initWithFormat:@"abc"];

    

    NSLog(@"_______ %p %p ",str4,str5);

   

   结果:

   2016-12-27 13:47:33.018 helloTest[1720:74271] _______ 0xa000000006362613 0xa000000006362613

   结论:存储在堆上,且位置相同,只有一份拷贝

    

    

    NSMutableString *str6 = [NSMutableStringstringWithString:@"abc"];

    NSString *str7 = [[NSMutableStringalloc] initWithString:@"abc"];

    

    NSLog(@"_______ %p %p ",str6,str7);

   

   结果:

   2016-12-27 13:47:33.018 helloTest[1720:74271] _______ 0x600000263f00 0x600000263f40 

   结论:存储在堆上,且位置不同,有两份数据

    

    NSMutableString *str8 = [[NSMutableStringalloc] initWithString:@"abc"];

    NSMutableString *str9 = [NSMutableStringstringWithFormat:@"abc"];

    

    NSLog(@"_______ %p %p ",str8,str9);

    结果:

    2016-12-27 13:47:33.018 helloTest[1720:74271] _______ 0x60800026e0c0 0x60800026d9c0 

    结论:存储在堆上,且位置不同,有两份数据,且与str6、str7位置均不同

    

0 0