用于分配初始化程序的Cocoa命名方案

用于分配初始化程序的Cocoa命名方案,第1张

概述出于某种原因,我认为这在内存管理命名规则下是有效的: Bar *bar = [Bar new];[Foo fooWithNewBar:bar];// no need to release bar, foo took ownership 但是现在我正在进行静态分析,它认为每次我这样做都会有潜在的泄漏. 我看到有__attribute((ns_consumed))我可以在fooWithNewBar @H_404_2@ 出于某种原因,我认为这在内存管理命名规则下是有效的:

bar *bar = [bar new];[Foo fooWithNewbar:bar];// no need to release bar,foo took ownership

但是现在我正在进行静态分析,它认为每次我这样做都会有潜在的泄漏.

我看到有__attribute((ns_consumed))我可以在fooWithNewbar声明中使用它.但是Xcode 4.0.1的Clang还不支持这个属性.

那么,没有这样的命名模式?

解决方法 我还认为在你的情况下没有与ns_consumed相对应的命名模式.命名模式很大程度上是由NeXTSTEP / Apple驱动的,我无法想象Apple框架中的方法与您想要的语义相同.

但请注意,you can tell Xcode to use a more recent version of Clang Static Analyser支持ns_consumed属性,该属性随checker-254一起发布.

我正在使用checker-256(今天发布,但任何版本> = 254应该可以工作)我刚试过以下内容:

// MyClass.h#ifndef __has_feature      // Optional.#define __has_feature(x) 0 // Compatibility with non-clang compilers.#endif#ifndef NS_CONSUMED#if __has_feature(attribute_ns_consumed)#define NS_CONSUMED __attribute__((ns_consumed))#else#define NS_CONSUMED#endif#endif@interface MyClass : NSObject {@private    Nsstring *_string;}+ (MyClass *)myClassWithNewStringConsumed:(Nsstring *) NS_CONSUMED string NS_RETURNS_RETAINED;+ (MyClass *)myClassWithNewString:(Nsstring *)string NS_RETURNS_RETAINED;@end

// MyClass.m#import "MyClass.h"@implementation MyClass+ (MyClass *)myClassWithNewStringConsumed:(Nsstring *)string {    MyClass *o = [MyClass new];    if (o) o->_string = string;    return o;}+ (MyClass *)myClassWithNewString:(Nsstring *)string {    MyClass *o = [MyClass new];    if (o) o->_string = string;    return o;}@end

此代码为存储在s中的字符串的潜在泄漏提供静态分析器警告:

// SomewhereElse.mNsstring *s = [[Nsstring alloc] initWithFormat:@"%d",[[nsprocessInfo processInfo] processIDentifIEr]];MyClass *o = [MyClass myClassWithNewString:s];[o release];

而这个使用带有ns_consumed属性的method参数的代码不会给出静态分析器警告:

// SomewhereElse.mNsstring *s = [[Nsstring alloc] initWithFormat:@"%d",[[nsprocessInfo processInfo] processIDentifIEr]];MyClass *o = [MyClass myClassWithNewStringConsumed:s];[o release];
@H_404_2@ 总结

以上是内存溢出为你收集整理的用于分配初始化程序的Cocoa命名方案全部内容,希望文章能够帮你解决用于分配初始化程序的Cocoa命名方案所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存