Objective c NSMutablearray addobject,不应添加对象
我有一个关于Objective c NSMutablearray addobject,不应添加对象,objective-c,Objective C,我有一个关于NSMutablearrayaddobject的问题,我想这是关于对象生命周期的问题。搜索但没有得到答案 代码如下: NSMutableString *str1 = [[NSMutableString alloc]init] ; NSMutableArray *arr1 = [[NSMutableArray alloc]init] ; for (int i=0 ;i<3 ;i++) { str1 =[NSMutableString str
NSMutablearray
addobject
的问题,我想这是关于对象生命周期的问题。搜索但没有得到答案
代码如下:
NSMutableString *str1 = [[NSMutableString alloc]init] ;
NSMutableArray *arr1 = [[NSMutableArray alloc]init] ;
for (int i=0 ;i<3 ;i++) {
str1 =[NSMutableString stringWithFormat:@"%ld",(random() % 100) ] ;
[arr1 addObject:str1] ;
NSLog(@"arr1 inside loop:%@",arr1) ;
[str1 setString:@""] ; }
NSLog(@"arr1 outside loop:%@",arr1) ;
NSMutableString *str2 = [[NSMutableString alloc]init] ;
NSMutableArray *arr2 = [[NSMutableArray alloc]init] ;
for (int i=0 ;i<3 ;i++) {
str2 =[NSMutableString stringWithFormat:@"%ld",(random() % 100) ] ;
[arr2 addObject:str2] ; }
[str2 setString:@"abc"] ;
NSLog(@"arr1:%@",arr2) ;
Q1:Arr1
,为什么添加的对象更改为”
?
(如果原因是所有3个对象都只是3个指针,并且它们指向同一个对象,那么我有Q2-)
问题2:Arr2
,为什么Arr2
的最后一个对象是“abc”
,而其他对象不是
谢谢 [str1 setString:@”“]
修改已添加到数组中的字符串。在第一步中,您有一个值为“83”
的可变字符串,但在迭代结束时,您将用一个空字符串“
重写这个相同的可变字符串
您可以删除该行,因为不再使用同一实例,实际上,您根本不需要可变字符串:
for (int i = 0; i < 3; i++) {
NSString *randomString = [NSString stringWithFormat:@"%ld", (random() % 100)] ;
[arr1 addObject:randomString];
NSLog(@"arr1 inside loop:%@", arr1);
}
for(int i=0;i<3;i++){
NSString*randomString=[NSString stringWithFormat:@“%ld”,(random()%100)];
[arr1 addObject:randomString];
NSLog(@“arr1内部循环:%@”,arr1);
}
[str1 setString:@”“]
修改已添加到数组中的字符串。在第一步中,您有一个值为“83”
的可变字符串,但在迭代结束时,您将用一个空字符串“
重写这个相同的可变字符串
您可以删除该行,因为不再使用同一实例,实际上,您根本不需要可变字符串:
for (int i = 0; i < 3; i++) {
NSString *randomString = [NSString stringWithFormat:@"%ld", (random() % 100)] ;
[arr1 addObject:randomString];
NSLog(@"arr1 inside loop:%@", arr1);
}
for(int i=0;i<3;i++){
NSString*randomString=[NSString stringWithFormat:@“%ld”,(random()%100)];
[arr1 addObject:randomString];
NSLog(@“arr1内部循环:%@”,arr1);
}
Q1:Arr1,为什么添加的对象更改为“”
每次使用[NSMutableString stringWithFormat:@“%ld”,(random()%100)]
您创建了一个新的NSMutableString
对象,并更改了str1
的指针,使其指向该新对象
但是,当您使用[str1 setString:@”“]时
,您更改了str1的对象值,因此也更改了数组对象值,因为[arr1 addObject:str1]
仅将str1
指针添加到arr1
数组
问题2:Arr2,为什么Arr2的最后一个对象是“abc”,而其他对象不是
这是您的代码,代码中的{
和}
分为两行:
for (int i=0 ;i<3 ;i++)
{
str2 =[NSMutableString stringWithFormat:@"%ld",(random() % 100) ];
[arr2 addObject:str2] ;
}
[str2 setString:@"abc"] ;
NSLog(@"arr1:%@",arr2) ;
for(int i=0;i
Q1:Arr1,为什么添加的对象更改为“”
每次使用[NSMutableString stringWithFormat:@“%ld”,(random()%100)];
时,您都创建了一个新的NSMutableString
对象,并更改了str1
的指针,使其指向该新对象
但是,当您使用[str1 setString:@”“];
时,您更改了str1
的对象值,因此也更改了数组对象值,因为[arr1 addObject:str1];
仅添加指向arr1
数组的str1
指针
问题2:Arr2,为什么Arr2的最后一个对象是“abc”,而其他对象不是
这是您的代码,代码中的{
和}
分为两行:
for (int i=0 ;i<3 ;i++)
{
str2 =[NSMutableString stringWithFormat:@"%ld",(random() % 100) ];
[arr2 addObject:str2] ;
}
[str2 setString:@"abc"] ;
NSLog(@"arr1:%@",arr2) ;
for(int i=0;iThanks,vitormm!你说得对!str=[nsmutablestringwith…]创建一个新对象,[str setString…]只修改字符串值,这就是重点!现在我将代码[set string…]修改为str=[nsmutablestringwithformat:@“%@”,“@”“],那么输出就是我想要的!谢谢,vitormm!你说得对!str=[NSMutableString stringwith…]创建一个新对象,[str setString…]只修改字符串值,这就是重点!现在我将代码[set string…]修改为str=[NSMutableString stringWithFormat:@“%@”,“@]”,然后输出就是我想要的!