1

私はiPhone開発に不慣れです。NIBファイルでUIView、UIImageView、UIScrollViewなどを取得しました。私の質問は、SuperViewからすべてのビューを削除できますか?例: `

-(void)dealloc
{
    [super dealloc];
    [imageView removeFromSuperview];
    [View1 removeFromSuperview];
    [View2 removeFromSuperview];      
    [ScrollView removeFromSuperview];

    [imageView release];
    [View1 release];
    [View2 release];
    [ScrollView release];

    imageView = nil;
    View1 = nil;
    View2 = nil;
    ScrollView = nil;
}

助けてください。ありがとう...

4

3 に答える 3

4

最初ではなく、[super dealloc];最後呼び出す必要があります。これは、オブジェクトをクリーンアップし、後でインスタンス変数にアクセスすることは未定義の動作であるためです。何かが発生する可能性があります。たとえば、すべてのインスタンス変数をに設定できます。この場合、次の呼び出しは効果がありません(したがって、リークが発生します)。また、とにかくそれらを使用するつもりはないので、インスタンス変数を設定する必要はありません。したがって、必要なのは次のとおりです。[super dealloc][super dealloc]nilreleasenil

-(void)dealloc
{
    [imageView release];
    [View1 release];
    [View2 release];
    [ScrollView release];

    [super dealloc];
}

さらにいくつかの注意:removeFromSuperview呼び出しは無害ですが不要です。これは暗黙的にによって行われ[super dealloc]ます。また、Appleの命名規則に従う必要があります。これは、変数名を大文字で始めてはならないことを意味します。したがって、scrollViewの代わりになりScrollViewます。

于 2012-06-04T06:36:20.200 に答える
1

とにかくスーパービュー自体を解放するので、これらのサブビューをスーパービューから削除する必要はありません。

次のように作成できdeallocます。

-(void)dealloc{

    [imageView release];
    [View1 release];
    [View2 release];
    [ScrollView release];

    imageView = nil;
    View1 = nil;
    View2 = nil;
    ScrollView = nil;

    [super dealloc];
}

[super dealloc]最後にあることに注意してください(詳細)。

于 2012-06-04T06:31:20.027 に答える
0

プロジェクトでARCを有効にすることをお勧めします。これらのオブジェクトを解放する必要はもうありません。システムが(ほとんどの)メモリ管理を処理します。

ARCの詳細については、http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.htmlを参照してください。

于 2012-06-04T06:34:14.000 に答える