int main(int agec,char *agev){
NSString *str1 = [[NSString alloc] init]; // 1
NSString *str2 = str1; //1
NSLog(@"str1.retainCount=%d,str2.retainCount=%d",[str1 retainCount],[str2 retainCount]); // str1.retainCount=1
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:str1]; //+1=2
NSLog(@"str1.retainCount=%d,str2.retainCount=%d",[str1 retainCount],[str2 retainCount]); // str1.retainCount = 2;
[array addObject:str2]; // +1=3
NSLog(@"str1.retainCount=%d,str2.retainCount=%d",[str1 retainCount],[str2 retainCount]); // str1.retainCount = 3;
[str2 release]; //-1=2 str1.retainCount = 2;
int i;
for( i=0;i<[array count];i++){
NSString *t = (NSString *)[array objectAtIndex:i];
NSLog(@"array[%d].retainCount=%d",i,[t retainCount]); // str1.retainCount = 2
}
NSLog(@"str1.retainCount=%d,str2.retainCount=%d",[str1 retainCount],[str2 retainCount]); // str1.retainCount = 2
[array release]; //-all=0 str1.retainCount=0 ->dealloc
NSLog(@"str1.retainCount=%d,str2.retainCount=%d",[str1 retainCount],[str2 retainCount]); // error throw
return 0;
}