NSString
一直对NSString有一些使用上的疑惑,看了一些博客,然后根据看到的内容自己也做了一些试验,现在做个记录。
一般创建NSString有两种方式.
NSString *string1 = @"string 1";
NSString *string2 = [NSString stringWithString:@"string 2"];(已废弃)
NSString *string3 = [NSString stringWithFormat:@"string 3"];
平时一般也只会用到第一种和第三种,那他们有什么区别呢?
__strong NSString *string1 = @"string1";
__weak NSString *string2 = string1;
NSLog(@"%@:%@", string1, [string1 class]);
NSLog(@"string1 = %p",string1);
NSLog(@"string2 = %p",string2);
string1 = nil;
NSLog(@"string2 = %@",string2);
__strong NSString *string3 = [[NSString alloc]initWithFormat:@"string 3"];
__weak NSString *string4 = string3;
NSLog(@"%@:%@", string3, [string3 class]);
NSLog(@"string3 = %p",string3);
NSLog(@"string4 = %p",string4);
string3 = nil;
NSLog(@"string4 = %@", string4);
__strong NSString *string5 = [[NSMutableString alloc]initWithString:@"string 5"];
__weak NSString *string6 = string5;
NSLog(@"%@:%@", string5, [string5 class]);
NSLog(@"string5 = %p",string3);
NSLog(@"string6 = %p",string6);
string5 = nil;
NSLog(@"string6 = %@", string6);
2016-12-02 15:23:15.901 Copy[2412:117582] string1:*__NSCFConstantString
2016-12-02 15:23:15.902 Copy[2412:117582] string1 = 0x10865f128
2016-12-02 15:23:15.902 Copy[2412:117582] string2 = 0x10865f128
2016-12-02 15:23:15.902 Copy[2412:117582] string2 = string1
2016-12-02 15:23:15.902 Copy[2412:117582] string 3:NSTaggedPointerString
2016-12-02 15:23:15.903 Copy[2412:117582] string3 = 0xa003041412da3df8
2016-12-02 15:23:15.903 Copy[2412:117582] string4 = 0xa003041412da3df8
2016-12-02 15:23:15.903 Copy[2412:117582] string4 = string 3
2016-12-02 15:23:15.903 Copy[2412:117582] string 5:__NSCFString
2016-12-02 15:23:15.903 Copy[2412:117582] string5 = 0x7ff311ea2830
2016-12-02 15:23:15.903 Copy[2412:117582] string6 = 0x7ff311ea2830
2016-12-02 15:23:15.903 Copy[2412:117582] string6 = (null)
问题一
string2 string4不是null? string6 = (null)
我的理解前两种只是指向了常量区的字符串,而第三种是开辟了新的空间去存储。
问题二
NSCFConstantString NSCFString NSTaggedPointerString是什么玩意?
采用Tagged Pointer的字符串
问题三
申明String变量的时候 到底是copy还是strong?
NSString到底是用copy还是strong?
问题四
还有个很有意思的事情,当对字符串对象赋值的时候,如果赋一样的值。 可能出现 恰好指到同一个地址
NSString * test = @"123";
NSString * test1 = @"123";
NSString * test2 = [NSString stringWithFormat:@"123"];
NSString * test3 =[[NSString alloc]initWithFormat:@"123"];
NSMutableString * test4 = [[NSMutableString
alloc]initWithFormat:@"123"];
NSMutableString * test5 = [NSMutableString stringWithFormat:@"123"];
NSLog(@"%p,%p,%p,%p,%p,%p",test,test1,test2,test3,test4,test5);
//0x1092a6448,
//0x10e149448,
//0xa000000003332313,
//0xa000000003332313,
//0x7ffe3863b390,
//0x7ffe3863da60