2013-08-01 107 views
-1

這裏是代碼:在removeFromSuperview line..How的UIImageView奇怪的崩潰

-(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; 
    } 
} 

崩潰,以避免崩潰?

注: 不使用ARC 我希望與自動釋放only..why崩潰解決問題......它的工作對其他對象。很多人都認爲它很難改變autorelease。因此,希望找到合適的理由..

+0

崩潰日誌和stacktrace會很好。 – rckoenes

+0

不使用autorelease –

+0

不使用ARC,爲什麼不autorelease? autorelease爲其他項目工作.. – iPhoneProcessor

回答

2

increaseImage像波紋管的alloc時間刪除autorelease ..

替換該行

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

與波紋線

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

我認爲使用ARC將捍衛這樣的情況下的代碼。 –

+1

@ValentinShamardin有一段時間當對象不在類中,我們試圖在當時刪除它bad_access發生.. :) –

+0

不使用ARC,autorelease爲其他對象工作..我想用autorelease修復...喜歡找到正確的理由。 – iPhoneProcessor

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; 
    } 
} 
+0

不使用ARC,autorelease爲其他對象工作..我想用autorelease修復...喜歡找到正確的理由.... – iPhoneProcessor