2011-09-13 6 views
0

私はWebのどこかから得たこのサンプルコードを持っています。cocos2dのUIViewを公開できません

私の.hファイルには次のようになります。

@interface PopupWindowString : CCNode <UITextFieldDelegate> { 
    UIView *landscapeView; 
    UITextField *username; 
} 

とinitメソッドで私の.mファイルがあります。

landscapeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
CGAffineTransform tr = landscapeView.transform; 
tr = CGAffineTransformRotate(tr, (M_PI * -2.0)); 
landscapeView.transform = tr; 
landscapeView.center = [[CCDirector sharedDirector] openGLView].center; 

username = [[UITextField alloc] initWithFrame:CGRectMake(160, 100, 160, 90)]; 
[username setTextAlignment:UITextAlignmentCenter]; 
[username setDelegate:self]; 
[username setPlaceholder:@"New name"]; 
[username setTextColor:[UIColor colorWithRed:255 green:255 blue:255 alpha:1.0]]; 
[landscapeView addSubview:username]; 

[[[CCDirector sharedDirector] openGLView] addSubview:landscapeView]; 

すべてがクールですべてですが、私は、閉じたときにポップアップのdeallocが呼び出されません。

landscapeViewのretainCountは、このコードの後に​​、まだ1であるようだ。

[username release]; 

[username removeFromSuperview]; 

[landscapeView release]; 

[landscapeView removeFromSuperview]; 

私はそれをどうするかについて見当もつかない...私はlandscapeViewを使用する任意の他の場所を持っていませんそれはここにしかない。

ポップアップを開く:私は試してみて、保持し、リリースからは呼ばれている場所を把握するのUIViewのサブクラスを試してみましたが、ここでリストだ

  1. は私のPopupWindowStringのinitメソッド
  2. からのコールを保持します[CALayerのlayoutSublayers]から
CALayerLayoutIfNeededから
  • リリースを保持210

    がポップアップを閉じる:[私はCCMenuItemImageを打つ]

    1. [__NSArrayMのaddObject]で[UIViewの(階層)サブビュー]から保持
    2. 私のコードからリリース[私は以前に貼り付け1]
    3. リリース私のコードから[サブビューから削除]

    ご覧のとおり、1つのリリースがありません。私は、ポップアップを閉じるとき、この最初の保持は、私がビューに触れることによって引き起こされると思います。しかしそれは決して解放されません。

    誰でもこの1つを解く方法を知っていますか?

    おかげで、あなたは黙示または直接のリリースと呼ばれ、その後、あなたの仕事をされて保持し、すべてのバランスをとるいる場合 Krystian

  • +0

    'retainCount'メソッドは0を返すことはできません。そのメソッドを呼び出さないでください。それは役に立たない。 – bbum

    +0

    すべてが私の間違いでした...私は悪いことがうまくいかず、私はサブビューを取り除くために別の方法を使用していたことをデバッグしようとしていました。この間私は私のポップアップをオートリリースするという呼び出しを取り除きました...私が行ったすべての変更の後、私は単にそれを戻すのを忘れてしまったのです... ...無駄な時間のために申し訳ありません。 – Krystian

    答えて

    1

    オブジェクトが漏洩していませんか?どのように決定しましたか(retainCountは決して正解ではありません)。

    書かれているように、そのコードはlandscapeViewを漏らすようには見えません。 deallocにコードをリリースするコードがない場合は、[landscapeView release]deallocに設定してクラッシュしないように、landscapeViewをnilに設定することをお勧めします。

    +0

    ありがとう。 – Krystian