关于retain和copy

关于retain和copy
 1  NSMutableString * tempString = [[NSMutableString alloc]initWithFormat: @" %@ " , @" testmemory " ];
 2      NSLog( @" tempString retainCount-----%D " ,[tempString retainCount]);
 3      NSLog( @" tempString -----%p---%p " ,tempString, & tempString);
 4      
 5      NSMutableString * string1 = [tempString retain];
 6      NSLog( @" string1 retainCount-----%D " ,[string1 retainCount]);
 7      NSLog( @" string1 -----%p---%p " ,string1, & string1);
 8      
 9      NSMutableString * string2 = [tempString mutableCopy];
10      NSLog( @" string2 retainCount-----%D " ,[string2 retainCount]);
11      NSLog( @" string2 -----%p---%p " ,string2, & string2);
12      
13      
14      NSString * s = [[NSString alloc]initWithFormat: @" %@ " , @" hello " ];
15      NSLog( @" s retainCount-----%D " ,[s retainCount]);
16      NSLog( @" s -----%p---%p " ,s, & s);
17      NSString * st = [s copy];
18      NSLog( @" st retainCount-----%D " ,[st retainCount]);
19      NSLog( @" st -----%p---%p " ,st, & st);
20      NSString * str = [s retain];
21      NSLog( @" str retainCount-----%D " ,[str retainCount]);
22      NSLog( @" str -----%p---%p " ,str, & str);

retain 时是表示指向了同一个内存空间,只是内存空间的retainCount加了1,其他的都没变,但是当copy时,如果那个内存单元里面的值是不可变的时候,我们跟retain是一样的,只是内存空间的retainCount加了1!如果那个内存单元里面的值是可变的时候,其实在在内存中另外给分配了一块内存空间,然后把值赋给内存空间里面。原来那个内存空间的retainCount不加1,现在新分配的内存空间retainCount1.

你可能感兴趣的:(关于retain和copy)