【问题标题】:How to avoid NSMutable array add object values changes before adding object to NSMutable array?如何在将对象添加到 NSMutablearray 之前避免 NSMutablearray 添加对象值更改?
【发布时间】:2014-05-25 05:51:03
【问题描述】:

我是 Objective C 的新手。我使用过以下代码。

for (int i = 0; i < [ValueisFound count]; i++)
{
    NSString* ObjectName = [NSString stringWithUTF8String:name];
    ObjectName = [[NSClassFromString([NSString stringWithUTF8String:samType]) alloc]init];

    NSMutableDictionary* jsonDictionary=[TemplateClass SeparateArray:jsonValue_1 key:[arrayofKeys objectAtIndex:j] index:i];

    ObjectName = [TemplateClass JsonPharser:str1 jsonObject:jsonDictionary];

    NSMutableArray *samArray=[[NSMutableArray alloc]initWithObjects:[TemplateClass JsonPharser:str1 jsonObject:jsonDictionary], nil];

    [manoj_Array addObject:samArray];

    [samArray release];
    [ObjectName release];
}

执行for循环时:

  • 在 i=0 时,Object 有值 (number=10),现在 manoj_Array 也有 (number=10)。
  • 在 i=1 时,Object 具有值 (number=12),现在 manoj_Array 具有 (number=12,number=12)。

但我希望结果为 manoj_Array 具有 (number=10,number=12)。我不知道该数组值如何更改为最后一个值。

【问题讨论】:

  • 首先,我真的不明白你想用 ObjectName 做什么。您也可以尝试的语法是 [manoj_Array addObject:@{[TemplateClass JsonPharser:str1 jsonObject:jsonDictionary]}];。您可以做的是将 samArray 的内存地址和 manoj_Array 的每个对象记录下来。
  • 非常感谢。如果我尝试“[manoj_Array addObject:@{[TemplateClass JsonPharser:str1 jsonObject:jsonDictionary]}];”将警告显示为“预期:”该怎么办?

标签: ios objective-c json nsmutablearray


【解决方案1】:

我的想法

samArray 和 manoj_Array 共享内存参考这就是为什么最后一个值插入到 manoj_Array

i = 0 值存储在 1000 的地址

i = 1 的值是通过 1002 的地址存储

但是 manoj_Array 共享内存,所以更改 Last value is added to manoj_Array

【讨论】:

  • 是的,先生。但是如何避免呢?
  • 尝试释放并保留变量内存
【解决方案2】:

您可以实现 KVO 以了解值何时发生更改并处理其行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多