Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
Ios 以UIImageView为中心的应用程序(内存泄漏)_Ios_Objective C_Ipad - Fatal编程技术网

Ios 以UIImageView为中心的应用程序(内存泄漏)

Ios 以UIImageView为中心的应用程序(内存泄漏),ios,objective-c,ipad,Ios,Objective C,Ipad,我有一个应用程序,它围绕着通过动作激活的图像工作。大多数应用程序将包含以下内容的各种变体,如下所示 -(IBAction)tap{ if(a == 0){ a = 1; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:(1.8)]; [image setAlpha:1]; }else if (a== 1){

我有一个应用程序,它围绕着通过动作激活的图像工作。大多数应用程序将包含以下内容的各种变体,如下所示

-(IBAction)tap{
    if(a == 0){
        a = 1;
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:(1.8)];
        [image setAlpha:1];
    }else if (a== 1){
        a = 0;
        [image setAlpha:0];
    }
     [UIView commitAnimations;
}
问题是,由于我收到多个内存警告,我没有可能在我的iPad上运行它。面向活动的工具明确指出,当我的应用程序被访问时,“BackboardDD”使用287兆字节。一旦访问了所有视图控制器中最重的一个,我的应用程序就会崩溃。我的问题是我将如何发布这些图片,直到这些图片是绝对需要的。请记住,在使用面向圆弧的方法时,许多方法是严格禁止的。我感谢任何回复此帖子来帮助我的尝试

更新:如果你看下面,你会看到的片段,让我能够加载图像

-(IBAction)thisisanaction{
    UIImage *letter = [UIImage imageNamed:@"HelloWorld.png"];
    [imageholder setImage:letter];
额外资料:

#   Address Category    Timestamp   Live    Size    Responsible Library Responsible Caller
2   0x4c4e000   VM: ImageIO_PNG_Data    00:02.263.286   •   128.59 MB   ImageIO ImageIO_Malloc

您是否使用
+[UIImage ImageName::
加载图像?如果是这样,系统框架将缓存这些图像,直到出现内存警告。您可以尝试使用
+[UIImage imageWithContentsOfFile:
加载图像,以控制其生命周期

当内存警告出现时,系统框架(理论上)会释放通过
+[UIImage imageNamed://code>缓存的图像,但根据经验,内存警告不会相互关联,也就是说,在进程被终止之前,您不必有足够的时间来减少消耗

根据您发布的代码:

-(IBAction)thisisanaction{
    UIImage* letter = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"HelloWorld" ofType: @"png"]];
    [imageholder setImage:letter];

这将防止它在系统缓存中准无限期地保留。我不能说您的其余代码是否正确处理了它,但这将消除
+[UIImage imageNamed:][/code>

的副作用。您是否使用
+[UIImage imageNamed:][/code>加载图像?如果是这样,系统框架将缓存这些图像,直到出现内存警告。您可以尝试使用
+[UIImage imageWithContentsOfFile:
加载图像,以控制其生命周期

当内存警告出现时,系统框架(理论上)会释放通过
+[UIImage imageNamed://code>缓存的图像,但根据经验,内存警告不会相互关联,也就是说,在进程被终止之前,您不必有足够的时间来减少消耗

根据您发布的代码:

-(IBAction)thisisanaction{
    UIImage* letter = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"HelloWorld" ofType: @"png"]];
    [imageholder setImage:letter];


这将防止它在系统缓存中准无限期地保留。我不能说您的代码的其余部分是否正确处理了它,但这将消除
+[UIImage imageNamed:][/code>

在使用+[UIImage imageNamed:]加载许多不同的图像时,我遇到了类似的内存问题,但ipmcc使用+[UIImage imageWithContentsOfFile:]的解决方案解决了这个问题。非常感谢

使用+[UIImage ImageName:]加载许多不同的图像时,我遇到了类似的内存问题,但ipmcc使用+[UIImage imageWithContentsOfFile:]的解决方案解决了这个问题。非常感谢

[UIView委员会]属于第一个
if
部分。如果(a==1)
,则删除第二行
,只需将该行
}设为else{
@ott--我认为提交是在正确的位置,但是开始和持续时间行实际上应该在
if
s之前。@Kevin按照这个顺序执行,当else部分也运行时。@ott--是的,我相信这是他的意思。@Kevin但是else部分没有
beginAnimation
在它里面。
[UIView commitAnimations];
属于第一个
if
部分。如果(a==1)
删除第二个
部分,只需将该行设置为
}否则{
@ott--我认为提交是在正确的位置,但是开始和持续时间行实际上应该在
if
s之前。@Kevin按照这个顺序执行,当else部分也运行时。@ott--是的,我相信这是他想要发生的。@Kevin但是else部分没有
beginAnimation
。你有一个有趣的答案nswer,因为我没有提到在我的应用程序中有这些片段。是的,你在检测我的应用程序中有这些片段方面是正确的。你能给我一个你的方法的例子吗?你为什么不编辑你的问题以包括加载图像的代码?这很难做到请允许我在不知道您现在拥有什么的情况下提供有用的代码。我已经更改了我的原始帖子,因此,您可以仔细检查我的片段。这些片段是否能够减少130兆字节的问题,这将是我目前的主要问题?可能。我不可能知道。您有一个有趣的答案,因为我没有提到任何内容hing关于在我的应用程序中包含这些片段的问题。是的,你在检测我的应用程序中包含这些片段方面是正确的。你能给我提供一个你的方法的示例吗?为什么不编辑你的问题以包含加载图像的代码?我很难提供有用的代码,而不知道你在做什么你现在有了。我已经修改了我原来的帖子,因此,你可以仔细检查我的部分。这些部分是否能够减少130兆字节的问题,这将是我目前的主要问题?也许。我不可能知道。