1

私の第1世代でテストするとき、私は本当に奇妙な問題を抱えています。iPad(iOS 5を実行)。

プロパティとして使用するUIViewがあります(保持あり)。親ビューのdeallocメソッドのプロパティをnilします。かなり基本的なもの。iOS6を実行しているiPad3で完璧に動作しますが、第1世代ではリリースされません。

何が起こっているのか考えてみませんか?

私はARCを使用していません。

4

3 に答える 3

2

保持している場合は、解放する必要があります。インスタンス変数を単にnilにすることはできません。

したがって、プロパティが次のようになっている場合:

@property (nonatomic, retain) UIView *myView;

あなたはdeallocは次のようになります:

- (void)dealloc
{
    [myView release], myView = nil;
    [super dealloc];
}

またはこれ:

- (void)dealloc
{
    [self setMyView:nil];
    [super dealloc];
}

またはこれ:

- (void)dealloc
{
    self.myView = nil;
    [super dealloc];
}

そして、他の何かがそれを保持していない限り、あなたの財産は適切に解放されます。

于 2013-02-13T02:51:21.043 に答える
1

だから私はこれを理解しました。iOS 6 SDKのバグのようですが、理解できないかもしれません。presentViewController:animated:completionを介して別のvcを提示するUIViewControllerがあります。—提示されたvcを閉じると、解放され、その後、すべてのサブビューが削除され、すべてが正常になります。

ただし、提示されたvcが表示されているときに、親vcを削除/破棄すると、提示されたvcの割り当てが解除されますが、そのサブビューはremoveFromSuperviewに指示されません。これは機器のリークとしては表示されませんが、サブビューの割り当てを解除することはできません。

これはiOS6では発生しないため、これはiOS5のバグであると思われます。iOS6で予想されるように、すべてがリリース/割り当て解除されます。

誰かが説明を持っているか、これをよりよく理解しているなら、私は私ではなく彼らに答えを与えたいと思います。

于 2013-02-13T19:56:36.813 に答える
0

ビューコントローラは、ビューコントローラの割り当てが解除されたときに、スーパービューからそのビューを削除する責任を負いません。ビューコントローラは、それへの独自の参照を解放する責任があります。

例:ビューコントローラーを作成し、そのビューを要求してから、そのビューを別のビューに追加して、ビューコントローラーを破棄できます。その場合は、ViewControllerをViewBuilderとして使用しているだけです。

iOS 6で動作が異なる理由はわかりませんが、知りたいと思います。

于 2013-02-14T07:05:08.277 に答える