-1

コードは次のとおりです。

-(void)initView
{
        increaseImage = [[[UIImageView alloc] initWithFrame:CGRectMake(277, 189, 511, 406)]autorelease];
         ..
         ..
         increaseImage.image = [UIImage imageNamed:[imgarray lastObject]];
         ..
         ..
}


-(void)cleanUpView
{

    if(increaseImage)
    {
        if([increaseImage superview]!=nil )
            [increaseImage removeFromSuperview];    //Crashes Here

        increaseImage = nil;
    }
}

removeFromSuperview 行でクラッシュします。クラッシュを回避するには?

注: ARC を使用していないため、autorelease のみの問題を修正したいと考えています..なぜクラッシュするのか...他のオブジェクトでも機能しました。多くのビューが使用されるため、自動解放を変更するのは困難です。だから正しい理由を見つけたい..

4

2 に答える 2

2

autorelease次のような割り当てられた時間に削除しincreaseImageます..

この行を置き換えます

increaseImage = [[[UIImageView alloc] initWithFrame:CGRectMake(277, 189, 511, 406)]autorelease];

怒鳴る線で

increaseImage = [[UIImageView alloc] initWithFrame:CGRectMake(277, 189, 511, 406)];
于 2013-08-01T13:09:38.440 に答える
1

親切に次のようにしてみてください:

-(void)initView
 {
        increaseImage = [[UIImageView alloc] initWithFrame:CGRectMake(277, 189, 511, 406)];
         ..
         ..
        increaseImage.image = [UIImage imageNamed:[imgarray lastObject]];
         ..
         ..
 }


-(void)cleanUpView
 {

   if(increaseImage)
   {
      if([increaseImage superview]!=nil )
        [increaseImage removeFromSuperview];    
        [increaseImage release];  // release here instead of autorelease
        increaseImage = nil;
   }
 }
于 2013-08-01T13:44:49.427 に答える