具有+0保留计数的对象返回给调用者,其中预期+1(拥有)保留计数 - 为什么?

Tia*_*ago 1 memory-leaks memory-management objective-c

我遇到以下代码时出现问题,其中Xcode标记了内存问题.警告位于返回线上的代码下方.有人知道为什么,我能做些什么呢?

- (id)copyWithZone:(NSZone *)zone
{
    NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:self];
    return [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
}
Run Code Online (Sandbox Code Playgroud)

Mvariable.m:177:2:具有+0保留计数的对象返回给调用者,其中预期+1(拥有)保留计数
Mvariable.m:177:9:Method返回具有+0保留计数的Objective-C对象
Mvariable.m:177:2:对象以+0保留计数返回给调用者
Mvariable.m:177:2:具有+0保留计数的对象返回给调用者,其中预期+1(拥有)保留计数

Gra*_*yer 7

以"copy","create","new","alloc"或"retain"开头的方法必须返回一个已保留的对象,即调用者必须释放它.

[NSKeyedUnarchiver unarchiveObjectWithData:archivedData] 返回一个autorelased对象.

请参阅:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

  • 请注意,使用归档来复制对象绝对不是典型的.与通常的做法相比,它也很慢. (3认同)