objective-c – 静态分析和“创建规则”

我想在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.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...