首页 \ 问答 \ 调用者此时不拥有的对象的引用计数的不正确的减少对于retain属性(Incorrect decrement of the reference count of an object that is not owned at this point by the caller For retain property)

调用者此时不拥有的对象的引用计数的不正确的减少对于retain属性(Incorrect decrement of the reference count of an object that is not owned at this point by the caller For retain property)

我创建了一个带有retain属性的NSString fName属性,并合成了该属性。 我在viewDidLoad上初始化了该属性。

我的实际问题是,我用[self.fName release]。 此示例工作正常,但静态分析器将此行显示为错误'调用者此时不拥有的对象的引用计数的不正确减少'。

参考代码:

@interface ViewController : UIViewController

@property(nonatomic,retain)NSString *fName;

@end

@implementation ViewController
@synthesize fName;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.fName =@"Hello";

    [self.fName release];//Analyzer showgin error here.

}
---------
------
end

i created one NSString fName property with retain attribute,and synthesised that property . i initialised that property on viewDidLoad.

my actual prob is , i used [self.fName release]. this sample working fine , but static analyzer showing this line as error 'Incorrect decrement of the reference count of an object that is not owned at this point by the caller'.

reference Code:

@interface ViewController : UIViewController

@property(nonatomic,retain)NSString *fName;

@end

@implementation ViewController
@synthesize fName;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.fName =@"Hello";

    [self.fName release];//Analyzer showgin error here.

}
---------
------
end

原文:https://stackoverflow.com/questions/17222807
更新时间:2021-06-07 06:06

最满意答案

那里没有必要释放。 你没有分配/初始化任何东西。 如果您正在做这样的事情:

self.fName = [[NSString alloc] initWithString:@"Hello"]; 

然后你必须释放self.fName。

根据经验,numberOfReleases = numberOfAlloc。

而现在,黄金法则,USE ARC :)


There is no need for release there. You don't alloc/init anything. If you are doing something like this:

self.fName = [[NSString alloc] initWithString:@"Hello"]; 

then you have to release the self.fName.

As a rule of thumb numberOfReleases = numberOfAlloc.

And now, the golden rule, USE ARC :)

相关问答

更多

此时不拥有的引用计数的减少不正确(Incorrect decrement of reference count not owned at this point)

关键是要考虑下面代码的作用。 为了清楚起见,我会全文写出来: [self setDataToBeLoaded:[[NSMutableData alloc] initWithLength:10000]]; 这将创建一个具有+1保留计数的对象,并将其传递给setDataToBeLoaded: . (*)然后抛弃它对该对象的引用,泄漏它。 [[self dataToBeLoaded] release]; 这会调用dataToBeLoaded并释放返回的对象。 没有任何承诺dataToBeLoaded ...

Obj-C,调用者此时不拥有的对象的引用计数的不正确减少?(Obj-C, Incorrect decrement of the reference count of an object that is not owned at this point by the caller?)

是的。 您正通过CGColorGetColorSpace函数获取CGColorSpaceRef 。 根据“创建/复制”规则,您没有该对象的所有权。 所以你不需要使用CGColorSpaceRelease释放它。 仅释放您明确分配或复制的对象。 这对于Objective-C以及CF样式类都有效。 在Objective-C中,这意味着对alloc的调用或对copy的调用(当然还有对retain的显式调用)将需要释放。 对于CF类,如果您使用名称中包含“create”或“copy”的方法获取对象,则需要 ...

我应该在分配给保留属性时保留自动释放对象吗?(Should I retain an autoreleased object when assigned to a retained property?)

一般来说,如果你想让一个自动释放的对象继续存在,你必须retain它。 这段代码有几个问题: - (NSArray *)models { if (!models) { models = [[NSArray alloc] initWithArray:[self.modelDictionary allKeys]]; models = [[models sortedArrayUsingSelector:@selector(compare:)] retain]; ...

调用者此时不拥有的对象的引用计数的不正确的减少对于retain属性(Incorrect decrement of the reference count of an object that is not owned at this point by the caller For retain property)

那里没有必要释放。 你没有分配/初始化任何东西。 如果您正在做这样的事情: self.fName = [[NSString alloc] initWithString:@"Hello"]; 然后你必须释放self.fName。 根据经验,numberOfReleases = numberOfAlloc。 而现在,黄金法则,USE ARC :) There is no need for release there. You don't alloc/init anything. If you ar ...

调用者此时不拥有的对象的引用计数的不正确的减少(Incorrect decrement of the reference count of an object that is not owned at this point by the caller)

由于您要重新分配imageString变量,因此对原始对象的引用将丢失。 为什么还要分配一个空字符串? 只需将代码更改为 NSString *imageString = [[[storiesArray objectAtIndex:i] objectForKey: @"image"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 并删除[imageString relea ...

调用者此时不拥有的对象的引用计数的不正确递减量(Incorrect decrement of the reference count of an object that is not owned at this point by the caller)

你正在发布一个属性getter方法返回的对象,在很多情况下这可能是一个可能的错误的迹象。 这就是为什么静态分析正在挑选它。 相反,使用: self.name = nil; 要么: [name release]; name = nil; You're releasing an object returned from a property getter method, which in many cases would be the indication of a possible bug. T ...

核心基础:为什么LLVM分析器报告调用者不拥有用* Create *函数创建的对象?(Core Foundation: why LLVM analyzer report that caller doesn't own object created with *Create* function?)

名称组件“创建”不会执行任何魔术; 这只是一个约定的问题。 所以,就此而言,是“所有权”的概念。 所以忘掉所有这些,只是想想保留数。 与你和我这样的人类不同,静态分析器可以看到你所有的代码,并可以计数。 它正在计算这个对象的保留和释放。 当我们在第一个例子中遇到CFRelease(_str)时,您先前已经释放了这个相同的对象,导致其保留计数降为零; 所以在这一点上你正在执行过度销售。 因此,静态分析器在这一点上标志着你。 现在我们回过头来,从“所有权”的角度再次思考。 只有东西的“所有者”才能释放 ...

iphone @property(retain),init()和标准(iphone @property(retain), init(), and standards)

为了分配给财产,你应该使用 self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 要么 [tabBarController release]; tabBarController = [[UITabBarController alloc] init]; (请记住先释放先前的值) 属性setter / getters应该全权负责保留/释放实例变量。 如果您(或其他人)更改属性设置器以获取输入副本而不是保留它 ...

什么时候保留计数自动释放的对象减少?(When does retain count for an autoreleased object decrement?)

不要看retainCount 。 这是误导。 只要你按照内存管理编程指南,那么你会没事的。 如果你改写你的问题,说“默认的自动释放池何时耗尽?” 然后答案是控制流程何时返回到runloop。 Don't look at retainCount. It's misleading. As long as you follow the Memory Management Programming Guide then you'll be fine. If you rephrase your questio ...

分析器警告有关不正确的减量(Analyzer warnings about incorrect decrement)

如果你的方法返回一个+1对象,它的名字应该以'new'开头,例如newCGImageFromCompressedData:withSize: 这将告诉分析器您故意返回一个保留对象并将所有权传递给调用者。 或者,你可以使用clang属性CF_RETURNS_RETAINED ,把它放在你的方法声明中(即在你的.h文件中): +(CGImageRef)cgImageFromCompressedData:(NSData *)compressedData ...

相关文章

更多

最新问答

更多
  • 如何从远程文件拉取文件而不覆盖本地文件?(How do I pull files from remote without overwriting local files?)
  • Reactjs:状态改变时重新渲染iframe(Reactjs: re-renders iframes when state changed)
  • 奇怪的网址,以及跟随php页面流程的困难(odd url, and difficulty in following the php page flow)
  • 标签活动无效(Tab Activity is not working)
  • JavaME合适的语法编译器建议?(JavaME-suitable grammar compiler recommendations?)
  • 指定参数(Specifying arguments)
  • 可以通过Ruby插件或控制台覆盖Sketchup中的键盘快捷键吗?(Can one override keyboard shortcuts in Sketchup through the a Ruby Plugin or Console?)
  • 计算Java EE Web App中用户数的最佳方法(Best way to count number of users in a Java EE web App)
  • 无法使用templateUrl加载cordova中的外部模板(unable to load external templates in cordova with templateUrl)
  • PHPExcel:写入期间无法使用缓存(PHPExcel: Unable to use cache during write)
  • 在javascript中嵌套这个指针(nested this pointer in javascript)
  • 谁跟领航致远培训过,有问题问下啊
  • 控制器要求在入门时下载(Controller ask to download on entry)
  • 未能通过conda安装Asyncio(Failure to install Asyncio via conda)
  • 如何查找已完成项目的总长度?(How to find length of total completed items?)
  • 如何检查OleInitialize是否已被调用?(How to check if OleInitialize has already been called?)
  • SQL在特定范围内返回列中具有最大值的行(SQL Returning rows with max value in column, within a specific range)
  • preg_match从url获取id(preg_match get the id from url)
  • 如何在运算符中为make方程转换perl变量?(How to convert a perl variable in a operator for make equations?)
  • 在导航上方添加空格/标题。(Add a white space/ header above navigation.)
  • MeetingItem已保存;(MeetingItem saved; but change now shown in Calendar)
  • c#vb:我们应该使用System.Lazy进行资源密集型任务吗?(c# vb: Should we use System.Lazy for resource-intensive task? (when threading is not needed))
  • 为什么在armeabi代码中使用armeabi-v7a代码?(Why use armeabi-v7a code over armeabi code?)
  • 获取请求的自定义标头(Java HTTP)(Fetching a custom header of a request (Java HTTP))
  • 是否可以在嵌套的if语句中从varchar转换为numeric以动态评估参数?(Is it possible to convert from varchar to numeric within a nested if statement in order to dynamically evaluate a parameter?)
  • 如何将Html.ActionLink转换为链接到Ajax调用的按钮?(How to convert from Html.ActionLink to a button linked to Ajax call?)
  • 应用程序如何处理Windows符号链接?(How are Windows symbolic links treated by the apps?)
  • html,js,css在jsfiddle中工作,但不在sharepoint中(html, js, css works in jsfiddle but not in sharepoint)
  • 从Ruby脚本调用Elasticsearch Rest API(Calling Elasticsearch Rest API from Ruby script)
  • 如何将嵌套setTimeouts转换为承诺(How to convert nested setTimeouts to promises)