Objective c NSMutableArray,是否添加/删除对象?

Objective c NSMutableArray,是否添加/删除对象?,objective-c,cocoa-touch,Objective C,Cocoa Touch,这是从数组前面弹出对象的正确方法吗。我只是好奇,因为我想可能有一个NSMutableArray方法返回一个保留对象。只是好奇我是不是做对了 // PUTTING OBJECTS IN NSMutableArray *fgStore = [[NSMutableArray alloc] init]; for(int counter=1; counter<=5; counter++) { NSString *dataValue = [[NSString alloc] initWithFo

这是从数组前面弹出对象的正确方法吗。我只是好奇,因为我想可能有一个NSMutableArray方法返回一个保留对象。只是好奇我是不是做对了

// PUTTING OBJECTS IN
NSMutableArray *fgStore = [[NSMutableArray alloc] init];
for(int counter=1; counter<=5; counter++) {
    NSString *dataValue = [[NSString alloc] initWithFormat:@"DATA%d", counter];
    [fgStore addObject:dataValue];
    [dataValue release];
}

// TAKING OBJECTS OUT
NSString *saveMe = [[fgStore objectAtIndex:0] retain];
[fgStore removeObjectAtIndex:0];    
NSLog(@"SAVE: %@", saveMe);
...
...
[fgStore release];
[saveMe release];
//将对象放入
NSMutableArray*fgStore=[[NSMutableArray alloc]init];

对于(int counter=1;counter这正是我要做的,我认为没有其他方法。通过返回保留的对象,您将打破Cocoa内存管理的主要规则之一:大多数时候,您只拥有
init…
方法返回的对象,而必须保留其余的对象。

这正是我要做的方法它,我不认为还有另外一个。通过返回保留的对象,您将打破Cocoa内存管理的主要规则之一:大多数时候,您只拥有由
init…
方法返回的对象,而必须保留其余的对象。

该代码看起来不错。您可能需要记住的唯一一点是,您可以使用autore租赁以避免在完成后进行显式释放。例如:

for(int counter=1; counter<=5; counter++) {
    NSString *dataValue = [[[NSString alloc]
                             initWithFormat:@"DATA%d", counter] autorelease];
    [fgStore addObject:dataValue];
}

for(int counter=1;counter该代码看起来不错。您可能需要记住的唯一一件事是,您可以在完成后使用自动释放来避免显式释放。例如:

for(int counter=1; counter<=5; counter++) {
    NSString *dataValue = [[[NSString alloc]
                             initWithFormat:@"DATA%d", counter] autorelease];
    [fgStore addObject:dataValue];
}

for(int counter=1;counterSome的人会不赞成自动释放,因为他们只在必要时使用自动释放。(我想这是风格的问题。)另外,
NSString
有一个方便的
stringWithFormat
类方法,因此
alloc
autorelease
对是额外的,但这是挑剔的。是的,NSString方便方法的优点。这将产生最可读的代码。谢谢你们两位,我之所以选择显式发布,是因为我我在iPhone上工作,我想确保手动释放东西,以尽可能降低内存占用。(即,不要等待自动释放池耗尽)不管怎样,这就是我的推理……自动释放的对象通常在下一次运行循环迭代中收集,这意味着几乎是立即收集。除非在循环中分配大量内存,否则你不必担心它们。(我还专门为iPhone编写代码,即使在游戏中也毫无顾忌地使用自动释放的对象。)但我也选择显式发布,除非我已经有一个自动释放的对象。谢谢,我才刚刚开始,所以我一直在努力保持最佳实践的工作方式。正如你所说,我几乎总是使用显式发布,尽管有时你不得不使用从方法中得到的东西。有些人会不赞成自动释放,因为他们只在必要时使用自动释放。(我想这是风格的问题。)另外,
NSString
有一个方便的
stringWithFormat
类方法,因此
alloc
autorelease
对是额外的,但这是挑剔的。是的,NSString方便方法的优点。这将产生最可读的代码。谢谢你们两位,我之所以选择显式发布,是因为我我在iPhone上工作,我想确保手动释放东西,以尽可能降低内存占用。(即,不要等待自动释放池耗尽)不管怎样,这就是我的推理……自动释放的对象通常在下一次运行循环迭代中收集,这意味着几乎是立即收集。除非在循环中分配大量内存,否则你不必担心它们。(我还专门为iPhone编写代码,即使在游戏中也毫无顾忌地使用自动释放的对象。)但是我也选择显式发布,除非我已经有了一个自动释放的对象。谢谢,我才刚刚开始,所以我一直在努力保持最佳实践的工作方式。就像你说的,我几乎总是使用显式发布,尽管有时你不得不使用从方法中得到的东西。我现在想我明白了这个词关于“返回一个保留对象”,我认为我想说的是一个“托管对象”?我不需要自己进行保留。这有意义吗?在这种情况下,“保留”有意义。“托管”不,至少对我来说不是。谢谢你,是的,我明白了。在返回时保留,保留计数为+1。基本上,我不需要保留它,只要在完成后释放它。非常感谢。我现在认为我在上面关于“返回保留对象”的措辞是错误的。我想我想说的是“托管对象”?因此我不需要保留自己。这有意义吗?“保留”在这种情况下有意义。“管理”没有,至少对我来说没有。谢谢你,是的,我明白了。保留时返回的重新计数为+1。基本上,我不需要保留它,完成后释放它。非常感谢。