在一个函数中分配和初始化对象,将其发送到其他函数并在那里释放它

时间:2012-01-30 09:26:26

标签: iphone objective-c

我有这个分配和初始化对象的功能:

    +(Item*)getItem:(NSString*)uid{
         Item *file = [[Item alloc]init];
         //do some stuff
         return file;
    }

这是对此功能的调用:

    Item *tmp = [LibraryScan getItem:itemid];
    //do some stuff
    [tmp release];

现在我想在我得到之后发布它,就像我上面写的那样。 我做得对吗?

3 个答案:

答案 0 :(得分:4)

在我看来,你应该在返回之前自动释放对象,让调用者决定他是否想要拥有它:

+(Item*)getItem:(NSString*)uid{
     Item *file = [[Item alloc]init];
     //do some stuff
     return [file autorelease];
}

所以:

Item *tmp = [LibraryScan getItem:itemid];
//do some stuff
//[tmp release]; nothing to release

答案 1 :(得分:1)

是的,您的代码是正确的。但它也应该满足objective-c命名约定,该约定声明返回非自动释放对象的方法(即调用者负责释放的对象)应该包含方法名称中的copy,alloc或new。

如果您真的想从中返回非自动释放的对象,我会将您的方法名称更改为newItem

答案 2 :(得分:0)

没错,但不是标准方式。

通过以下方式修改您的实施:

+(Item*)getItem:(NSString*)uid {
     Item *file = [[[Item alloc]init]autorelease];
     //do some stuff
     return file;
}

和:

Item *tmp = [[LibraryScan getItem:itemid]retain];
//do some stuff
[tmp release];

它可以帮助您正确调试内存泄漏。