tips:本文主要讨论描述引用计数,未做相应release
//字符串常量系统不收回不引用 retain count -1 或unsigned int 2147483647
NSString *stringConst = @"hello";
NSLog(@"stringConst:%@ retain count %ld direct to %p <---- self address %p",stringConst,[stringConstretainCount],stringConst,&stringConst);
//对常量retain release无效
[stringConst retain];
NSLog(@"stringConst:%@ retain count %ld direct to %p <---- self address %p",stringConst,[stringConstretainCount],stringConst,&stringConst);
//stringWithString取决于后面的对象常量->不引用 -1
NSString *string_C = [NSStringstringWithString:stringConst];
NSLog(@"string_C :%@ retain count %ld direct to %p <---- self address %p\n\n",string_C,[string_CretainCount],string_C,&string_C);
//变量系统进行引用计数
NSString *string_A = [NSStringstringWithFormat:@"hello A"];
NSLog(@"string_A:%@ retain count %ld direct to %p <---- self address %p",string_A,[string_AretainCount],string_A,&string_A);
//stringWithString取决于后面的对象变量->一个对象B对另一个对象A的引用 +1=2
NSString *string_B = [NSStringstringWithString:string_A];
NSLog(@"string_B:%@ retain count %ld direct to %p <---- self address %p",string_B,[string_BretainCount],string_B,&string_B);
/*stringConst是NSString不可变字符串对象,自身地址不变,并不是表示stringConst的值不变,而是初始化之后不能改变该内存里的值,
但可以为该变量重新分配内存空间,也就是说自身地址没变,指向的内存地址变了,可对比第一条和最后一条log*/
stringConst = @"test";
NSLog(@"stringConst:%@ retain count %ld direct to %p <---- self address %p",stringConst,[stringConstretainCount],stringConst,&stringConst);
log如下:
2015-04-29 15:40:02.431 try[2097:64393] stringConst:hello retain count -1 direct to 0x10f337050 <---- self address 0x7fff508c8b58
2015-04-29 15:40:02.431 try[2097:64393] stringConst:hello retain count -1 direct to 0x10f337050 <---- self address 0x7fff508c8b58
2015-04-29 15:40:02.431 try[2097:64393] string_C :hello retain count -1 direct to 0x10f337050 <---- self address 0x7fff508c8b50
2015-04-29 15:40:02.431 try[2097:64393] string_A:hello A retain count 1 direct to 0x7fb8db9041d0 <---- self address 0x7fff508c8b48
2015-04-29 15:40:02.431 try[2097:64393] string_B:hello A retain count 2 direct to 0x7fb8db9041d0 <---- self address 0x7fff508c8b40
2015-04-29 15:40:02.431 try[2097:64393] stringConst:test retain count -1 direct to 0x10f337110 <---- self address 0x7fff508c8b58