Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将UIImage的区域指定给UIImageView animationImages时发生泄漏_Iphone_Ios_Memory Leaks_Uiimageview_Uiimage - Fatal编程技术网

Iphone 将UIImage的区域指定给UIImageView animationImages时发生泄漏

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 category方法,可以执行以下操作:

- (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,也与您在问题中发布的代码无关。该代码很好。