NSDictionary和NSArray、NSString都是容器
NSString *str=[[NSString alloc]initWithString:@"123"];
含义:分配内存k,存储字符串"123",
指针str指向这个内存地址;
NSString *strTemp=str;含义:将指针str指向的地址传递给指针strTemp
两个指针str、strTemp指向同一个地址K
NSArray *arr=[[NSArray alloc]initWithObject:strTemp];
[arr objectAtIndex:0]也是指针,也指向地址K
情况1:
//str=(NSMutableString*)@"123456";
//str=[NSMutableString stringWithString:@"123456"];
//str=(NSMutableString*)[str stringByAppendingString:@"456"];
重新分配内存L,存储字符串:"123456";
指针str指向地址L;值变为"123456"
此时指针strTemp、[arr objectAtIndex:0]依旧指向地址K,
值当然不会变,依旧为"123"
情况2:改变指针所指地址的值,所有
NSRange range={0,[str length]};
//[str replaceOccurrencesOfString:@"2"withString:@"5"
options:NSCaseInsensitiveSearch range:range];
//[str appendString:@"567"];
指针str 改变所指地址K的值(指针可以改变所指地址储存的值)
指向地址K的所有指针str、strTemp、[arr objectAtIndex:0]
的值都将改变
情况3:
[str release];
str=nil;
释放指针atr,地址K没被释放
指向K的strTemp和[str objectAtIndex:0]的值不变
实际应用:
libxml解析时,分支节点数据存储,需要新建字符串:
1则alloc分配内存,并将读取到的数据存到地址上,
字符串指针指向这个地址
2传递指针到事先声明的容器(包括储存数据的类、结构体等)
3释放字符串指针(完成数据转移)