微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从NSMutableArray返回的自动释放对象

如何解决从NSMutableArray返回的自动释放对象

方法返回从中获取的对象并且NSMutableArray是否必须自动释放该对象?检查以下方法。还应该自动释放nil值吗?
-(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;
}
    

解决方法

您不能自动释放
element
,因为您不是它的所有者(您尚未保留它)。如果您使用
alloc
new
retain
购买了它,您将成为它的所有者。由于您获得了名为“ 5”的对象,因此您不拥有它。参见三个魔术词。在此处调用ѭ6会导致稍后崩溃,导致释放过多。 您的方法名称不正确,并且破坏了KVC。以
get
开头的方法必须采用将随结果更新的指针。这应该是
elementForID:
。正如上面提到的三个魔术词,在ObjC中命名对于编写稳定的代码非常重要 附带说明一下,在大多数情况下,通常使用ѭ9而不是
NSObject*
。它们的含义略有不同,但通常ѭ9是正确的。     ,您不需要对
nil
做任何与内存管理相关的事情。因此,不,您不应该将
autorelease
发送到
nil
。 您也不需要将
autorelease
发送到要从
elements
数组返回的
element
对象。由于return17ѭ本身保留了它,因此您要返回的对象将保留在内存中。如果调用方法想对返回的值进行“ 4”运算,则可以。但是,如果该调用方法仅在其自己的范围内使用返回的值,则在不保留它的情况下这样做是安全的。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。