我有这个分配和初始化对象的功能:
+(Item*)getItem:(NSString*)uid{
Item *file = [[Item alloc]init];
//do some stuff
return file;
}
这是对此功能的调用:
Item *tmp = [LibraryScan getItem:itemid];
//do some stuff
[tmp release];
现在我想在我得到之后发布它,就像我上面写的那样。 我做得对吗?
答案 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];
它可以帮助您正确调试内存泄漏。