循环中的NSMutableArray和内存

时间:2018-07-17 13:46:45

标签: objective-c macos for-loop memory nsarray

首先道歉的标题比较模糊,但是我不确定如何对问题进行分类。

我在High Sierra上使用Xcode 8.1,我一直在反对真正应该是简单代码的地方。我想我无法掌握一些有关Objective-C内存分配的关键信息。

所以,首先我似乎已经排序了。

我尝试了以下代码:

fullDetails = [[NSArray alloc] init];
for( lineContent in fileByLine)
{
    fullDetails = [lineContent componentsSeparatedByString:@"\t"];
}

运行此命令时,我在fileByLine中获得27个条目,并逐行正确填充fullDetails。但是,尽管它已经初始化,但是没有任何内容进入fullDetails。我担心在插入初始值之前不知何故为零,所以我也尝试按索引填充,索引从零开始。效果一样。

但是,以下代码可以正常工作:

for( lineContent in fileByLine)
{
    fullDetails = [[NSArray alloc] initWithArray:[lineContent componentsSeparatedByString:@"\t"]];
}

(我确实说过应该很简单。)

因此,我知道如何获得想要的结果,但我真的不明白为什么第一个小球不起作用。我想这是关于for循环内外的变量范围的原因-但是为什么呢?

我现在遇到了真正的问题(对我来说)。在扩展的酒杯中:

NSString *newEntry = [[NSString alloc] init];
NSMutableArray *workingArray = [[NSMutableArray alloc] init];
for( lineContent in fileByLine)
{
    fullDetails = [[NSArray alloc] initWithArray:[lineContent componentsSeparatedByString:@"\t"]];
    newEntry = [fullDetails objectAtIndex:1];
    [workingArray addObject:newEntry];
}

一切正常(包括newEntry),但是我无法将迭代的newEntry项目添加到workingArray:我没有收到错误;只有0个条目。

我已经尝试了各种mod到addObject行。特别是,我担心它只是覆盖了一个NSString存储库(尽管即使这样,我也应该有一个存储区)。所以我尝试了:

NSString *newEntry = [[NSString alloc] init];
NSMutableArray *workingArray = [[NSMutableArray alloc] init];
for( lineContent in fileByLine)
{
    fullDetails = [[NSArray alloc] initWithArray:[lineContent componentsSeparatedByString:@"\t"]];
    newEntry = [fullDetails objectAtIndex:1];
    [workingArray addObject:[[NSString alloc] initWithString:newEntry]];
}

NSMutableArray *workingArray = [[NSMutableArray alloc] init];
for( lineContent in fileByLine)
{
    fullDetails = [[NSArray alloc] initWithArray:[lineContent componentsSeparatedByString:@"\t"]];
    NSString *newEntry = [[NSString alloc] initWithString:[fullDetails objectAtIndex:1]];
    [workingArray addObject:[[NSString alloc] initWithString:newEntry]];
}

NSMutableArray *workingArray = [[NSMutableArray alloc] init];
for( lineContent in fileByLine)
{
    fullDetails = [[NSArray alloc] initWithArray:[lineContent componentsSeparatedByString:@"\t"]];
    [workingArray addObject:[[NSString alloc] initWithString:[fullDetails objectAtIndex:1]]];
}

所以,请告诉我我所缺少的。我敢肯定这很明显,但我看不到。

1 个答案:

答案 0 :(得分:0)

我将Xcode升级到了9.4.1版,现在可以正常使用了。因此,它似乎是旧版本中的一个错误(尽管我不愿意哭泣,“错误!”:这太容易解决了)。无论如何,应该显而易见的一个答案是:确保我使用的是最新版本。