2012-05-13 8 views
0

に割り当て解除インスタンスに送信されたメッセージ私はmySegmentedと呼ばれるこの特性を持って、このiphone - ブロック

.h 
@property (retain) UISegmentedControl *mySegmented; 


.m 
@synthesize mySegmented = _mySegmented; 

のように宣言、それは次のように作成されました:

self.mySegmented = [self createSegmented]; 
// createSegmented creates an autoreleased segmented control 

私のアプリは、3種類のを持っていますセグメント化されたコントロール。一度に1つだけ表示されます。 私のアプリケーションのいくつかの時点で、私は1つの特定のセグメント化されたコントロールを隠す必要があるので、私はすべてのセグメント化されたコントロールの配列を構築し、繰り返します...これはブロック内にあります。何が起こるか

[UIView animateWithDuration:0.8 

      animations:^{ 

       NSArray *list = [NSArray arrayWithObjects: 
            self.mySegmented1, 
            self.mySegmented2, 
            self.mySegmented3, 
            nil]; 

       for (UISegmentedControl *oneSeg in list) { 
        [oneSeg setAlpha:0.0f]; 
       } 

      }]; 

は次のとおりです。いくつかの時間後、アプリがクラッシュし、この配列を構築しようとしているとき。私は、セグメント化されたコントロールの1つが何らかの形で割り当て解除されたと考えます。私がコードで見ることができる解約はありません。

私の質問は:作成されている。この配列は自動解放されます。ブロックがアニメーションを終了するとどうなりますか?配列の各メンバーに送信されるリリースですか?

私はそれを作成した後にセグメント化された制御を保持した場合、Xcodeはそれがリークします文句を言います。

手がかりはありますか?

ありがとうございました。

答えて

2

あなたがしようとしたように保持するが、dealloc方法でそれらを解放することを確認し、Xcodeはそのように文句を言うべきではありませんしてください。

あなたの配列はまた、ブロック内で自動解放されたが、それは本当の問題は、あなたのビューコントローラによって保持されていないセグメント化されたコントロールで、配列はその中の参照を所有していない、大丈夫です。

どうすればいいか教えてください。私は[_mySegmented1リリース]持っている私のdeallocで

+0

。 [_mySegmented2リリース]; [_mySegmented3リリース];どのように私はそれをリリースすると思いますか? [self.mySegmented1 release]; ????????????? – SpaceDog

+0

こんにちは、あなたの実装では '@synthesize mySegmented1 = _mySegmented1;'がうまく見えます。ビューコントローラが解放されたとき、これは、 'self.mySegmented1 = [[自己createSegmented]保持]あなたのオブジェクトを取得する際に、今あなたがしたい、これらのオブジェクトを解放します;' – Daniel

+0

感謝を!!!!!!!!!!!! – SpaceDog