我想在NSBezierPath上添加一个类别来返回路径的CGPathRef.由于这是一个核心基础对象,我无法自动释放它,并且该方法的调用者负责释放它.通过将“复制”或“创建”作为方法名称的一部分放置,我想我遵循Apple在此设置的约定:
https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html
但是,静态分析器不会接受它,除非我更进一步,并且 – 不仅包括创建/复制作为名称的一部分,而且 – 实际上用“copy”(或mutableCopy等)启动方法名称.
但是,这样做违反了命名类别方法的最佳实践,因为它们应该加上前缀以避免命名冲突.
实现以下所有目标的最佳方法是什么:
>在Cocoa类的类别上添加方法
> …返回Core Foundation对象
> …在分析仪中不会发出警告
> …并根据最佳实践命名?
解决方法
你的意思是这样的:
// // NSBezierPath+MCAdditions.h // // Created by Sean Patrick O'Brien on 4/1/08. // Copyright 2008 MolokoCacao. All rights reserved. // #import <Cocoa/Cocoa.h> #import "AnalyzerMacros.h" @interface NSBezierPath (MCAdditions) + (NSBezierPath *)bezierPathWithCGPath:(CGPathRef)pathRef; - (CGPathRef)cgPath CF_RETURNS_RETAINED; - (NSBezierPath *)pathWithStrokeWidth:(CGFloat)strokeWidth; - (void)fillWithInnerShadow:(NSShadow *)shadow; - (void)drawBlurWithColor:(NSColor *)color radius:(CGFloat)radius; - (void)strokeInside; - (void)strokeInsideWithinRect:(NSRect)clipRect; @end
这不是我的代码;我添加了CF_RETURNS_RETAINED以帮助静态分析器输出.
有关clang源注释的完整参考可用于here.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。