2012-03-29 6 views
0

私はiOS 4アプリケーションを開発しています。IBOutletsプロパティ。リリースまたはリリースしない

私はこれのViewControllerを持っている:

@interface BlogViewController : UIViewController 
{ 
    ... 

    UIView* tabBar; 
} 

@property (nonatomic, retain) IBOutlet UIView* tabBar; 

とその実装:

とその実装:

@implementation BlogViewController 

@synthesize tabBar; 

- (void) dealloc 
{ 
    ... 

    [super dealloc]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
    self.tabBar = nil; 
} 

私の質問私はIBOutlet性質を持っている場合、それは宣言する必要がありますUIViewこれは好きですか?

@interface BlogViewController : UIViewController 
{ 
    ... 

    UIView* tabBar; 
} 

私はそれを行う場合、私はdeallocにそれを解放する必要がありますか?

- (void) dealloc 
    { 
     ... 
     [tabBar release]; 

     [super dealloc]; 
    } 

答えて

3

順番に:いいえインスタンス変数を宣言する必要はありません。はい、オブジェクトを解放する必要があります。 Automatic Reference Countingを使用して、メモリ管理の面を正しいものにすることを検討することができます。

+0

したがって、IBOutletをプロパティとしてのみ使用すると、何もする必要はありません( ' - (void)viewDidUnload;)のみ)?ご回答有難うございます。 – VansFannel

+0

これは、プロパティに 'retain'メモリ属性を与えたからです。 deallocまたは 'viewDidUnload'のリリースとその値の設定の保持のバランスをとる必要があります。 'assign'プロパティを使うと、それは必要ではありません。 –

+0

'dealloc'または' viewDidUnload'ですか?つまり、 'viewDidUnload'で解放すれば、' dealloc'にする必要はありませんか? –

1

はい、を保有している場合は、のIBOutletをリリースする必要があります。通常の練習ではなくretainstrongassignまたはweak@propertyを使用することですので

はしかし、IBOutletsは、そのペン先ファイルによって所有されています。あなたの場合はを解放する必要はありません。

+0

そして、私が 'viewDidUnload'でassingを使うと、' self.tabBar = nil; 'をセットする必要がありますか?ありがとう。 – VansFannel

+0

もちろん、なぜでしょうか。 'assign'または' weak'プロパティでは、 'nil'に設定すると、ポインタは' nil'に設定され、それ以外は何もしません。 – yuji

+0

ありがとう。どちらの答えもとても役に立ちました。 – VansFannel

0

コンセントを作成しているときにxcode 4+を使用している場合は、deallocとviewDidUnloadで同じものをリリースしますので、再度行う必要はありません。

関連する問題