参照カウントのいくつかのテスト
3937 ワード
copyと参照カウントについて質問されました.久しぶりだったので、推測を検証するためにテストをしました.
テストコード:
しゅつりょく
以上のテストコードによると、可変配列に対してcopy操作を実行すると、真のコピー操作が実行され、参照カウントは変わらない.可変数のcopy操作は、コピー操作を実際に実行するのではなく、カウント+1を参照します.
テストコード:
しゅつりょく
以上のテストコードから、
可変配列に対してmutableCopy操作を実行すると、真のコピー操作が実行され、参照カウントは変更されません.可変数値に対してmutableCopy操作を行うと、実際にコピー操作が実行され、参照カウントは変更されません.
テストコード:
NSLog(@" ===copy ");
NSMutableArray *mutableArray1 = [[NSMutableArray alloc]init];
[mutableArray1 addObject:@"sun"];
NSLog(@"mutableArray1.retainCount == %ld",mutableArray1.retainCount);
NSArray *mutableArray2=[mutableArray1 copy];
NSLog(@"mutableArray1.retainCount == %ld",mutableArray1.retainCount);
NSLog(@"mutableArray2.retainCount == %ld",mutableArray2.retainCount);
NSLog(@"mutableArray1: %p
mutableArray1:%p",mutableArray1,mutableArray2);
NSLog(@" ===copy ");
NSArray *array1=[[NSArray alloc]initWithObjects:@"sun", nil];
NSLog(@"array1.retainCount == %ld",array1.retainCount);
NSArray *array2=[array1 copy];
NSLog(@"array1.retainCount == %ld",array1.retainCount);
NSLog(@"array2.retainCount == %ld",array2.retainCount);
NSLog(@"array1: %p
array1:%p",array1,array2);
しゅつりょく
2014-11-25 17:35:45.617 test [7141:128919] =======
2014-11-25 17:35:45.617 test [7141:128919] mutableArray1.retainCount == 1
2014-11-25 17:35:45.617 test [7141:128919] mutableArray1.retainCount == 1
2014-11-25 17:35:45.617 test [7141:128919] mutableArray2.retainCount == 1
2014-11-25 17:35:45.618 test [7141:128919] mutableArray1: 0x7ff58974dc60 mutableArray1:0x7ff58974db40
2014-11-25 17:35:45.618 test [7141:128919] =======
2014-11-25 17:35:45.618 test [7141:128919] array1.retainCount == 1
2014-11-25 17:35:45.618 test [7141:128919] array1.retainCount == 2
2014-11-25 17:35:45.618 test [7141:128919] array2.retainCount == 2
2014-11-25 17:35:45.618 test [7141:128919] array1: 0x7ff58974db60 array1:0x7ff58974db60
以上のテストコードによると、可変配列に対してcopy操作を実行すると、真のコピー操作が実行され、参照カウントは変わらない.可変数のcopy操作は、コピー操作を実際に実行するのではなく、カウント+1を参照します.
テストコード:
NSLog(@" ===mutableCopy");
NSMutableArray *mutableArray1 = [[NSMutableArray alloc]init];
[mutableArray1 addObject:@"sun"];
NSLog(@"mutableArray1.retainCount == %ld",mutableArray1.retainCount);
NSArray *mutableArray2=[mutableArray1 mutableCopy];
NSLog(@"mutableArray1.retainCount == %ld",mutableArray1.retainCount);
NSLog(@"mutableArray2.retainCount == %ld",mutableArray2.retainCount);
NSLog(@"mutableArray1: %p
mutableArray1:%p",mutableArray1,mutableArray2);
NSLog(@" ===mutableCopy");
NSArray *array1=[[NSArray alloc]initWithObjects:@"sun", nil];
NSLog(@"array1.retainCount == %ld",array1.retainCount);
NSArray *array2=[array1 mutableCopy];
NSLog(@"array1.retainCount == %ld",array1.retainCount);
NSLog(@"array2.retainCount == %ld",array2.retainCount);
NSLog(@"array1: %p
array1:%p",array1,array2);
しゅつりょく
2014-11-25 17:41:17.205 test [7188:131600] =======
2014-11-25 17:41:17.206 test [7188:131600] mutableArray1.retainCount == 1
2014-11-25 17:41:17.206 test [7188:131600] mutableArray1.retainCount == 1
2014-11-25 17:41:17.206 test [7188:131600] mutableArray2.retainCount == 1
2014-11-25 17:41:17.206 test [7188:131600] mutableArray1: 0x7fc71bc95650 mutableArray1:0x7fc71bc95680
2014-11-25 17:41:17.206 test [7188:131600] =======
2014-11-25 17:41:17.207 test [7188:131600] array1.retainCount == 1
2014-11-25 17:41:17.207 test [7188:131600] array1.retainCount == 1
2014-11-25 17:41:17.207 test [7188:131600] array2.retainCount == 1
2014-11-25 17:41:17.207 test [7188:131600] array1: 0x7fc71bc2b380 array1:0x7fc71bc3e280
以上のテストコードから、
可変配列に対してmutableCopy操作を実行すると、真のコピー操作が実行され、参照カウントは変更されません.可変数値に対してmutableCopy操作を行うと、実際にコピー操作が実行され、参照カウントは変更されません.