Iphone 将UIImage的区域指定给UIImageView animationImages时发生泄漏
我有一个UIImage category方法,可以执行以下操作:Iphone 将UIImage的区域指定给UIImageView animationImages时发生泄漏,iphone,ios,memory-leaks,uiimageview,uiimage,Iphone,Ios,Memory Leaks,Uiimageview,Uiimage,我有一个UIImage category方法,可以执行以下操作: - (UIImage *)subimageInRect:(CGRect)rect { CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect); UIImage *answer = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); re
- (UIImage *)subimageInRect:(CGRect)rect {
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect);
UIImage *answer = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return answer;
}
还有另一种分类方法,它将一个短而宽的图像(如胶片条)切成N个比例更均匀的图像(如帧),如下所示:
- (NSArray *)subimagesHorizontally:(NSInteger)count {
NSMutableArray *answer = [NSMutableArray arrayWithCapacity:count];
CGFloat width = self.size.width / count;
CGRect rect = CGRectMake(0.0, 0.0, width, self.size.height);
for (int i=0; i<count; i++) {
[answer addObject:[self subimageInRect:rect]];
rect = CGRectOffset(rect, width, 0.0);
}
return [NSArray arrayWithArray:answer];
}
-(NSArray*)子映像横向:(NSInteger)计数{
NSMutableArray*answer=[NSMutableArray阵列容量:计数];
CGFloat width=self.size.width/计数;
CGRect rect=CGRectMake(0.0,0.0,宽度,自身大小,高度);
对于(int i=0;i首先,您发布的代码不会创建可调整大小的图像,也不会调用ResizeableImageWithCapinsets:
,因此前两个泄漏与代码无关。类似地,后两个泄漏发生在[UIImageView setAnimationImages]
,您发布的代码不会调用它。我会查看在解除分配图像视图后是否仍报告泄漏。如果图像视图位于可重用的表视图单元格中,这可能会混淆仪器。事实上,在这种情况下,动画图像只能与表视图本身一起解除分配
简而言之,您应该研究相关的方法(顺便说一下,仪器还可以显示它认为发生泄漏的堆栈跟踪)。您发布的代码绝对没有问题。首先,您发布的代码不会创建可调整大小的图像,也不会调用ResizeableImageWithCapInsets:
,因此前两个泄漏与代码无关。类似地,后两个泄漏发生在[UIImageView setAnimationImages]
,您发布的代码不会调用它。我会查看在解除分配图像视图后是否仍报告泄漏。如果图像视图位于可重用的表视图单元格中,这可能会混淆仪器。事实上,在这种情况下,动画图像只能与表视图本身一起解除分配
简而言之,您应该研究相关的方法(顺便说一下,仪器还可以显示它认为发生泄漏的堆栈跟踪)。您发布的代码绝对正确,不管是ARC还是not。忘记提到这是ARC中的。忘记提到这是ARC中的。谢谢。我也应该提到这一点:我从来没有使用过ResizebleMagewithCapinsets:或setAnimationImages。我猜错了(我猜错了)我的代码间接使用了这些。再次感谢。也许我应该这样问:如果我的应用程序没有出现在“责任库”列中,你认为我可以得出结论,检测到的泄漏是模拟器的泄漏,我应该忽略它们吗?你应该检查泄漏的堆栈跟踪。你可能泄漏了使用s内部可调整大小的图像。但是,即使为true,也与您在问题中发布的代码无关。该代码很好。谢谢。我也应该提到:我从未使用过ResizebleMageWithCapinsets:或setAnimationImages。我猜错了(我猜错了)我的代码间接使用了这些。再次感谢。也许我应该这样问:如果我的应用程序没有出现在“责任库”列中,你认为我可以得出结论,检测到的泄漏是模拟器的泄漏,我应该忽略它们吗?你应该检查泄漏的堆栈跟踪。你可能泄漏了使用s内部可调整大小的图像。但是,即使为true,也与您在问题中发布的代码无关。该代码很好。