Ios 这段代码的内存管理问题是什么?
XCode分析器告诉我第4行有问题-Ios 这段代码的内存管理问题是什么?,ios,memory-management,coding-style,Ios,Memory Management,Coding Style,XCode分析器告诉我第4行有问题-返回[originalError copy]-但我没看到。请帮帮我好吗 - (NSError *)errorFromOriginalError:(NSError *)originalError error:(NSError *)secondError { if (secondError == nil) { return [originalError copy]; } // ... } 问题描述如下: 第203行上分配
返回[originalError copy]代码>-但我没看到。请帮帮我好吗
- (NSError *)errorFromOriginalError:(NSError *)originalError error:(NSError *)secondError
{
if (secondError == nil) {
return [originalError copy];
}
// ...
}
问题描述如下:
- 第203行上分配的对象的潜在泄漏
- 方法返回具有+1保留计数(拥有引用)的Objective-C对象
- 对象作为所属引用返回给调用方(单个保留计数转移给调用方)
- 第203行上分配的对象是从名称('errorFromOriginalError:error:')不包含“copy”或以“new”或“alloc”开头的方法返回的。这违反了Cocoa(对象泄漏)的内存管理指南中给出的命名约定规则
- 潜在的空解引用。根据“创建和返回N错误对象”中的编码标准,参数“error”可能为空
第三个问题似乎建议我应该进一步更改该方法的名称或行为。有什么建议吗?该方法源自中描述的errorfromOriginaleror:error:
方法。其目的是将originalError
和secondError
组合在一起,以便secondError
是originalError
的子错误
如果没有实际的secondError
,我的添加将尝试确保该方法仍然有效。由于如果secondError
不是nil
,则会创建一个新的错误对象,因此我想在上面显示的情况下,通过简单地复制错误对象来重新创建它。[originalError copy]
创建一个保留计数设置为1的新对象。然后调用方法负责释放该对象。如果你正在这样做,那么这不一定是个问题,但是自动释放它可能是一个更好的主意
即
[originalError copy]
创建保留计数设置为1的新对象。然后调用方法负责释放该对象。如果你正在这样做,那么这不一定是个问题,但是自动释放它可能是一个更好的主意
即
您正在复制originalError,但函数名意味着返回的对象将自动删除。试一试
return [[originalError copy] autorelease];
您正在复制originalError,但函数名意味着返回的对象将自动删除。试一试
return [[originalError copy] autorelease];
谢谢,这确实解决了问题,除了最后一个问题(潜在的空解引用)。我怎样才能摆脱那个?我尝试添加'if(originalError==nil)return nil;'在开始的方法,但没有用。看到这个答案:谢谢。(我不知道是否不赞成在上面添加“谢谢”的评论。我认为这是礼貌的,但社区怎么想?)不知道,我自己也是新来的:-)谢谢,这确实解决了问题,除了最后一个问题(潜在的无效解引用)。我怎样才能摆脱那个?我尝试添加'if(originalError==nil)return nil;'在开始的方法,但没有用。看到这个答案:谢谢。(我不知道是否不赞成在上面加上“谢谢”的评论。我认为这是礼貌的,但社区是怎么想的?)不知道,我自己也是新来的:-)谢谢你的回答;它和jrturton的一样正确。我希望你不介意我给他打上正确的标记,因为他回答得稍微快一点;它和jrturton的一样正确。我希望你不介意我给他打上正确的标记,因为他回答得稍微快一点。