我在函数返回的自定义对象(称为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;
}
我不确定我要在哪里发布对象
答案 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建议的那样,如果可能的话,将它作为静态(+)方法可能是一个好主意。