从NSMutableArray返回的自动释放对象

时间:2011-04-13 15:25:28

标签: iphone ios memory-management

当一个方法返回一个取自的对象时,NSMutableArray是否必须自动释放该对象?检查以下方法。我也应该自动释放零值吗?

-(NSObject*)getElementByID:(NSString*)ID{

    for(int i=0;i<[elements count];i++){
        NSObject *element = (NSObject*) [elements objectAtIndex:i];

        if([element.key isEqualToString:ID]){
            return [element autorelease];
        }
    }

    return nil;
}

2 个答案:

答案 0 :(得分:3)

您不能自动发布element,因为您不是它的拥有者(您没有保留它)。如果您使用allocnewretain获取,则您将成为其所有者。由于您获取此对象调用objectAtIndex:,因此您不拥有它。见Three Magic Words。在此处调用autorelease将导致稍后发生崩溃。

您的方法名称不正确并破坏了KVC。以get开头的方法必须使用将使用结果更新的指针。这应该是elementForID:。如上所述,使用三个神奇的词语,在ObjC中命名对于编写稳定的代码非常重要

作为旁注,传统上使用id是大多数情况而不是NSObject*。它们意味着略有不同,但通常id是正确的。

答案 1 :(得分:0)

您永远不需要与nil进行任何与内存管理相关的事情。所以,不,你不应该将autorelease发送给nil

您也不需要将autorelease发送到您从element阵列返回的elements对象。你返回的那个对象将因elements本身保留它而留在记忆中。如果调用方法希望retain返回的值,则可能。但是,如果该调用方法仅在其自己的范围内使用返回的值,则在不保留它的情况下这样做是安全的。