Ios 物体潜在泄漏
有什么能帮助我理解为什么我在运行analyze时遇到这个问题 我有一个存储在“oldShadowPath”中的对象的潜在泄漏Ios 物体潜在泄漏,ios,objective-c,memory-leaks,Ios,Objective C,Memory Leaks,有什么能帮助我理解为什么我在运行analyze时遇到这个问题 我有一个存储在“oldShadowPath”中的对象的潜在泄漏 这是因为您没有对应于每个CFRetain的CFRelease。您在双“if”语句中释放对象,其中一个独立于保留条件(“oldShadowPath”)。正如@H2CO3所评论的那样,如果持续时间为0,则永远不会释放oldShadowPath。如果持续时间为0,则永远不会释放oldShadowPath。谢谢。问题是我试图添加一个else语句来处理duration==0。使用e
这是因为您没有对应于每个CFRetain的CFRelease。您在双“if”语句中释放对象,其中一个独立于保留条件(“oldShadowPath”)。正如@H2CO3所评论的那样,如果
持续时间
为0,则永远不会释放oldShadowPath
。如果持续时间
为0,则永远不会释放oldShadowPath
。谢谢。问题是我试图添加一个else语句来处理duration==0。使用else{CFRelease(oldShadowPath);}
但是我对CFRelease进行了空指针调用。是的,您还应该检查'oldShadowPath'中的nil。为什么不在那些ifs之外释放它,并且只检查if(oldShadowPath)?编辑:或者更好:您可能可以为oldShadowPath案例分离逻辑。当它为零时,如果您不需要做任何事情,您可以在第一行检查它,如果为零,则返回。
-(void) layoutShadowWithDuration:(NSTimeInterval)duration
{
CGPathRef oldShadowPath = self.mainViewController.view.layer.shadowPath;
if (oldShadowPath)
{
CFRetain(oldShadowPath);
}
// Update shadow path for the view
CGPathRef path = [UIBezierPath bezierPathWithRect:self.mainViewController.view.bounds].CGPath;
self.mainViewController.view.layer.shadowPath = path;
// You would think setting duration to 0 would cause the animation added below to not animate. You would be wrong.
if (duration != 0) {
if (oldShadowPath)
{
[self.mainViewController.view.layer addAnimation:((^ {
CABasicAnimation *transition = [CABasicAnimation animationWithKeyPath:@"shadowPath"];
transition.fromValue = (__bridge id)oldShadowPath;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.duration = duration;
return transition;
})()) forKey:@"transition"];
CFRelease(oldShadowPath);
}
}
}