1

こんにちは私は私のアプリケーションにこれを持っています:問題は、私が置くべきかということself.label =nilです; でviewDidUnload?はいの場合、なぜですか?

//.h
@interface MyClass

@property (nonatomic, retain) IBOutlet UILabel *label;

@end

//.m
@implementation Myclass

@syntesize label = label_;

- (void)dealloc
{
   self.label =nil;
}

@end
4

4 に答える 4

3

はい、labelプロパティをinとinのnil両方に設定する必要があります。はメモリ不足の状況で呼び出され、アプリが不要なメモリをパージできるようにします。viewDidUnloaddeallocviewDidUnload

nilinに設定しviewDidUnloadないと、通常はメモリリークが発生しませんが、アプリが必要なときにメモリを保存できなくなります。

于 2012-07-04T12:47:24.387 に答える
3

やったほうがいい。

viewDidUnload低メモリ状態で呼び出されます。したがって、クリーンアップする場合はself.yourOutlet = nil、このメソッドでも呼び出します。さらに、アプリのメモリを節約できます。

次回(viewDidUnloadメソッドが呼び出された後)、viewメモリに再度ロードされ(viewDidLoad呼び出され)、コンセントが正しく設定されます。

経験則として、でリリースするものはすべてIBOutlet、このメソッドdeallocでもリリースする必要があります(参照はnil likeに設定されますself.label = nil)。

メモ

を呼び出さないself.label = nil;でくださいdealloc。代わりに、 Appleメモリ管理ガイド[label_ release];に記載されているように実行してください。

さらに、StackOverflow検索はあなたの友達です:

UIViewController viewDidUnloadはいつ呼び出されますか?

-deallocではなく-(void)viewDidUnloadでオブジェクトをリリースする必要があるのはいつですか?

お役に立てば幸いです。

編集

ARCを使用しない場合(私はそうは思わない)[super dealloc];、次のように呼び出す必要があります。

- (void)dealloc
{
   [label_ release];

   [super dealloc];
}
于 2012-07-04T12:57:19.750 に答える
1

あなたがすべき。ほとんどの場合必要ではありませんが、viewDidUnloadでオブジェクトへのすべてのポインターをnilに設定することをお勧めします。Paul Hegartyは、CS193Pの講義番号8で、コントローラーのライフサイクルについて説明しています。

あなたはここでそれを見ることができます:http://itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255?mt = 2

于 2012-07-04T12:47:05.340 に答える
-2

これを置くことができますが、[label release]、self.label=nil;を置くこともできます。または単に[ラベルリリース];

そのオブジェクト用に予約されているメモリがガベージコレクションされるようにするためのメモリ管理です[メモリが解放されました]。古いiphone3gでは非常に重要です。ユーザーがプログラムを実行するためのメモリが少なくなりますが、新しいiphone 4 + / ios 5.xではarcを使用し、ARCプロジェクトを使用する場合はスキップできるため、最小限に抑えられます。

于 2012-07-04T12:43:50.587 に答える