Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutablearray addobject,不应添加对象_Objective C - Fatal编程技术网

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:@“%@”,“@]”,然后输出就是我想要的!