objective-c - 我应该如何避免这种内存警告?

标签 objective-c memory-management naming-conventions

我有一个返回 CGPath 并生成分析器警告的方法。该方法在协议(protocol)中声明。这是生成警告的示例实现:

"Potential leak of an object allocated on line 47 and stored into 'path'":

- (CGPathRef)createPathForBounds:(CGRect)bounds key:(NSString *)key;
{
    if ([key isEqualToString:OvalColumn])
    {
        CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL);
        return path;
    }

    return NULL;
}

这是生成警告的示例用法,“调用者此时不拥有的对象的引用计数不正确减少”

CGPathRef path = [self.delegate createPathForBounds:bounds key:someKey];

// Use the path to do some drawing

CGRelease(path);

我的内存管理是正确的;我从我的协议(protocol)方法传回一个保留的 CGPath 并在调用 block 中释放它,所以我知道可以忽略警告,但我想将它们完全删除。

我是否缺少让分析器满意的命名约定? 功能可以在协议(protocol)中定义吗? 子类化将如何工作?

最佳答案

- (CGPathRef)newPathForBounds:(CGRect)bounds 键:(NSString *)key

可以找到有关该主题的详细说明 here

或者,您可以选择使用属性 cf_returns_retained,但最好 (imo) 支持命名约定。

关于objective-c - 我应该如何避免这种内存警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193167/

相关文章:

ios - 字符串值在 Objective-C 中始终显示 nil

objective-c - 支持1词频的标签云算法

ios - 了解 performSegueWithIdentifier

objective-c - 如何在 GCD block 中指定返回类型

c++ - 什么是隐式共享类?

与 Windows 7 相比,Windows 10 的性能较差(页面错误处理不可扩展,当线程数 > 16 时锁争用严重)

Scala 生成列表的排列耗尽内存

java - 类名在 Java 中是复数形式是什么意思,例如 "Collections"?

c# - 可以成功/失败的操作——返回类型和命名约定

language-agnostic - 我使用仅大小写不同于其类型的变量名是不道德的吗?