作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Xcode Analyze 提示我错误地减少了标记为“this line”的行的引用计数。这似乎有点奇怪,因为该行递减引用计数并不明显。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
UIImage * image = [[UIImage alloc] initWithData:receivedData];
if (image == nil) {
image = [UIImage imageNamed:@"null.bmp"];
}
self.itemImage.image = image; //this line
self.promotion.image = image;
[image release];
}
最佳答案
这是一件有点棘手的事情;造成困惑是可以理解的。此处的两条路径导致 image
持有具有不同所有权状态的对象,因此具有不同的引用计数。
遍历 if
会导致 image
持有您的代码不拥有的对象。
UIImage * image = [[UIImage alloc] initWithData:receivedData];
// If |initWithData:| succeeds, the object in |image| is owned, because you
// called |alloc| to create it.
if (image == nil) {
image = [UIImage imageNamed:@"null.bmp"];
// This object is _not_ owned by your code and you must not send
// |release| to it.
}
// ... the setter lines are irrelevant to the reference count of |image|.
[image release];
// This is only okay if |initWithData:| succeeded and you have ownership
// of |image|.
我认为分析器指示错误的行,就像编译器会在五行后提示缺少分号一样。
解决这个问题的方法可能是保留从 imageNamed:
获得的图像。你不能只是不发送 release
,因为在一种情况下,您确实拥有image
,并且您需要适本地放弃该所有权。我还建议在其中添加有关发送 retain
的评论,以便您在八个月后记住您这样做的原因。
比这更好的是,正如无与伦比的 Bavarious 在下面所建议的,而且我想你自己已经想到了,将自动释放 alloc
的图像并删除后来的 release
行。
关于objective-c - 引用计数的不那么明显的减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897153/
通常当我请求线程转储时,系统性能不佳的症状很容易解释;也就是说,通常我会看到许多线程显然正在等待一个已被获取但未被另一个释放的监视器。 在这种情况下,我有很多线程在等待监视器 (0x965ad100)
C:\Users\shagy\Desktop\3RD YEAR 2ND SEMESTER\SPM\Newfolder\SPM-SMS>npm start npm ERR! path C:\Users\
我是一名优秀的程序员,十分优秀!