【问题标题】:Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected - Why?具有 +0 保留计数的对象返回给调用者,其中预期 +1(拥有)保留计数 - 为什么?
【发布时间】:2013-02-28 20:57:10
【问题描述】:

我在使用以下代码时遇到问题,其中 Xcode 正在标记内存问题。警告位于代码下方,在返回行上。有人知道为什么,我能做些什么吗?

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

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

【问题讨论】:

    标签: objective-c memory-management memory-leaks


    【解决方案1】:

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

    [NSKeyedUnarchiver unarchiveObjectWithData:archivedData] 返回一个自动关联的对象。

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

    【讨论】:

    • 请注意,使用归档来复制对象绝对不是典型的。与这样做的正常方式相比,它也很慢。
    • 哦,哇,我没有意识到一个方法名的开头可以做到这一点,多么奇怪。感谢您的回答!
    • 在过去,这只是一个约定,没有 ARC,也没有 __strong__weak 的标记,也没有 (__attribute__((ns_returns_autoreleased))) 的语法甜味......所以我们必须保持以某种方式跟踪事物......
    猜你喜欢
    • 2011-04-02
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2023-03-19
    • 1970-01-01
    • 2012-01-13
    相关资源
    最近更新 更多