释放函数返回的自定义对象

时间:2012-10-08 22:29:03

标签: objective-c xcode

我在函数返回的自定义对象(称为LinesOfText类)时遇到泄漏内存错误。这是一个简单的例子,没有详细的实现:

-(void)myMethod(){
LinesOfText *linesOfText = [self linesOftext:@"this is my text"];
} 

-(LinesOfText *)linesOftext:(NSString *)_string{
LinesOfText *linesOfText = [[linesOfText alloc] init];
[linesOfText propsOfTextLine:_string];
return linesOfText;
}

我不确定我要在哪里发布对象

2 个答案:

答案 0 :(得分:0)

在myMethod中,使用:

LinesOfText *linesOfText = [[LinesOfText linesOftext:@"this is my text"] autorelease];

而不是:

LinesOfText *linesOfText = [self linesOftext:@"this is my text"];

在您的其他文件中,使用:

+(LinesOfText *)linesOftext:(NSString *)_string {

而不是:

-(LinesOfText *)linesOftext:(NSString *)_string {

答案 1 :(得分:0)

通常这样的方法应该返回一个自动释放的值,也就是说,在你的linesOftext方法中,做

return [linesOfText autorelease];

(或在创建时立即调用autorelease),

LinesOfText *linesOfText = [[[linesOfText alloc] init] autorelease];

按照惯例,如果您的方法名称包含“new”,“alloc”,“copy”,它应该返回一个保留的对象。否则返回一个自动释放的对象(例如,请参阅NSMutableArray的arrayWithCapacity:或NSString的stringWithFormat等方法:... 有关详情,请参阅此处:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

是的,就像zsnow建议的那样,如果可能的话,将它作为静态(+)方法可能是一个好主意。