2011-07-05 9 views
1

私はリーク機器を初めて使用しています。 私は、ソースコードを見たとき、それはipadでリーク機器を解析する際の問題

- (id) initWithFrame: (CGRect) frame 
{ 
    [self LoadMoviePlayer]; 

    **self= [super initWithFrame:frame];** 
    if (self==[super initWithFrame:frame]) 
    { 
     CAEAGLLayer* eaglLayer = (CAEAGLLayer*) self.layer; 
     eaglLayer.opaque = YES; 

- (void) applicationDidFinishLaunching: (UIApplication*) application 
{ 
    CGRect screenBounds = [[UIScreen mainScreen] bounds]; 

    m_window = [[UIWindow alloc] initWithFrame: screenBounds]; 
    **m_view = [[GLView alloc] initWithFrame: screenBounds];** 

    [m_window addSubview: m_view]; 
    [m_window makeKeyAndVisible]; 
} 

は、問題を解決するために次に何をすべきかわかりません....これらの二つの太字の文で示して、私のコードで2つのリークを取得しています。

答えて

0

初期化せずにinitでコードを実行すると、最初のリークが発生します(は[self loadMoviePlayer]の後に発生します)。一見、m_viewは割り当てられているようですが、リリースされていないようです

CGRect screenBounds = [[UIScreen mainScreen] bounds]; 

m_window = [[UIWindow alloc] initWithFrame: screenBounds]; 
m_view = [[GLView alloc] initWithFrame: screenBounds]; 

[m_window addSubview: m_view]; 
[m_view release]; 
[m_window makeKeyAndVisible]; 

これは、m_viewが既にウィンドウに追加されているため(つまり、保持されているので)、これでうまくいくはずです。

+0

私はdealloc関数でm_viewを公開していますが、理由はわかりませんが、 "self = [super initWithFrame:frame];問題が解決されます。私はself.loadmoviePlayerが呼び出された時点で自己価値とnullではないことを確認しています。誰も私の問題について考えています。 – LebRon

+1

m_viewの割り当ては保持カウントを1にし、ウィンドウのaddSubViewは2に設定します。コンポーネントのdeallocは1に解放しますが、ウィンドウから削除しない限りウィンドウを解放しないで、保持カウントは1のままです。 – Fuggly

+1

また、そのloadMoviePlayer行の背後にあるアイデアは、if()ブロック内の[super initWithFrame:]を正確に実行した後です。完全に初期化されていないオブジェクト(ここではまさにそうである)にオブジェクトのインスタンスを作成した場合、その動作は「そのようにしたくない」というように定義されます。あなたはすでにif()ブロック内のレイヤのプロパティを設定していますが、そのif()ブロックにそのムービープレーヤをロードしないのはなぜですか? – Fuggly

関連する問題