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

objective-c – 静态分析和“创建规则”,第1张

概述我想在NSBezierPath上添加一个类别来返回路径的CGPathRef.由于这是一个核心基础对象,我无法自动释放它,并且该方法的调用者负责释放它.通过将“复制”或“创建”作为方法名称的一部分放置,我想我遵循Apple在此设置的约定: https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/ 我想在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.

总结

以上是内存溢出为你收集整理的objective-c – 静态分析和“创建规则”全部内容,希望文章能够帮你解决objective-c – 静态分析和“创建规则”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/999067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存