2011-01-22 39 views
0

guys.i'm new to iphone。 我遇到一個問題。uiimageview無法發佈...這裏是代碼。IPHONE UIIMAGEVIEW無法發佈?

#import <UIKit/UIKit.h> 
@interface imageNavView : UIImageView { 

    int index; 
} 
@property int index; 

@end 
#import "imageNavView.h" 


    @implementation imageNavView 
    @synthesize index; 
    - (id)initWithFrame:(CGRect)frameRect{ 
     self = [super initWithFrame:frameRect]; 
     if (self) { 
      // Custom initialization. 
      self.userInteractionEnabled=YES; 
      self.multipleTouchEnabled=YES; 
      self.opaque=YES; 
      self.autoresizingMask=(UIViewAutoresizingFlexibleHeight| 
            UIViewAutoresizingFlexibleWidth| 
            UIViewAutoresizingFlexibleRightMargin 
            |UIViewAutoresizingFlexibleLeftMargin 
            |UIViewAutoresizingFlexibleTopMargin 
            |UIViewAutoresizingFlexibleBottomMargin); 
      index=0; 
     } 
     return self; 
    } 

    - (void)dealloc { 
     NSLog(@"before image dealloc %i",[self retainCount]);-------- log is 1 
      [super dealloc]; 
     NSLog(@"after image dealloc %i",[self retainCount]);-------- log is 1,why itn't bad access? 
    } 


    @end 

爲什麼第二次登錄NSLog(@「after image dealloc%i」,[self retainCount]);是1,訪問不錯,所以imageview不會被釋放。 我不明白,任何可能的方式可以做到這一點?...任何意見將gratefull.thanks提前!

回答

0

dealloc是系統釋放對象時的回調方法。

下面的描述是的dealloc的API文檔,

相反,一個對象的dealloc方法是間接地通過釋放NSObject的協議方法調用的(如果在接收機的保留計數所述釋放消息的結果成爲0)。

0

這是一個很好的例子,你應該爲什麼

從來沒有打電話給retainCount

。對象的絕對保留數是一個實現細節,它通常是一個沒有意義的值。

解除分配後調用方法的行爲是完全未定義。在這種情況下,它可能會崩潰,它可能不會。如果你打開殭屍檢測,它肯定會崩潰。

既然是絕對沒有辦法,retainCount所能返回0,沒有理由爲對象釋放遞減保留計數爲0

+0

我覺得編譯器甚至應該發出警告調用它。 – 2011-01-22 21:06:57