ビューとして表示されない iOS クラスで
@interface MyDataClass : NSObject{}
メソッドを安全に呼び出すことができる、viewDidUnload
またはと同様に、オーバーライドでき、クラスの実行/ライフサイクルの最後に一貫して呼び出されるメソッドはありますか?dealloc
あるいは、そのようなクラスの有用な寿命の完了を認識できるメソッドを実装するにはどうすればよいでしょうか?
ビューとして表示されない iOS クラスで
@interface MyDataClass : NSObject{}
メソッドを安全に呼び出すことができる、viewDidUnload
またはと同様に、オーバーライドでき、クラスの実行/ライフサイクルの最後に一貫して呼び出されるメソッドはありますか?dealloc
あるいは、そのようなクラスの有用な寿命の完了を認識できるメソッドを実装するにはどうすればよいでしょうか?
NSObjectサブクラスがメモリから解放された場合に呼び出される最後のメソッドはdeallocだと思います。
- (void)dealloc
{
[super dealloc];
}
お気に入り
- (void)dealloc
{
[super dealloc];
}
?
dealloc
(オブジェクトの割り当てが解除されたときではなく)メモリ不足の状態で呼び出される以外の別のメソッドが必要だと想像してみてください。どのオブジェクトがそのメソッドを呼び出しますか?
viewDidUnload
UIフレームワークの一部であり、UIフレームワークによって呼び出されます。アプリケーションがメモリ不足状態に関するメッセージを受け取ると、フレームワークはメッセージをすべてのアクティブなViewControllerにリダイレクトするだけです。
カスタムクラスにメソッドを作成して同じことを実装できます。たとえば-(void)onLowMemory
、メソッドからアプリケーションデリゲートからapplicationDidReceiveMemoryWarning
メソッドを呼び出すか、クラスを登録してリッスンすることができますUIApplicationDidReceiveMemoryWarningNotification
。
クラス全体 (インスタンスではなく)の存続期間の終わりに実行されるメソッドを意味する場合、クラスの使用がいつ終了したかをランタイムがどのように認識しているのか疑問に思います (いつでも新しいインスタンスを作成できます)。 ? メソッドはありますが+initialize
、技術的にはクラス自体は永久に (プログラムが終了するまで) 利用可能です。
インスタンスの存続期間を意味する場合、探しているメソッドは です-dealloc
。
-dealloc は、オブジェクトの内部参照カウントがゼロになるたびに呼び出されます。非 ARC コードでは、それをオーバーライドする場合、スーパークラスの実装を呼び出す必要があります。これにより、最終的にNSObject
が-dealloc
呼び出され、そのときにメモリが解放されます。
編集:メモリ不足の状況に関しては、通知を登録する方法は次のとおりです。
// Somewhere inside the -init method of your class
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMethod:)
name:UIApplicationDidReceiveMemoryWarningNotification
object:nil];
dealloc 内では、これを行う必要があります。
[[NSNotificationCenter defaultCenter] removeObserver:self];
...そうしないと、アプリがクラッシュする可能性があります。
そしてもちろん、メモリ不足の状況で呼び出される次のシグネチャを持つメソッドを実装する必要があります。
- (void) myMethod:(NSNotification*) notification
{
// Do some cleanup here, perhaps.
}
(そうしないと、アプリがクラッシュします)
このstackoverflowリンクは多かれ少なかれ私の質問に答えますが、完全ではありません。私の質問は、単純に答えられるものではなく、アーキテクチャまたはメソッドの調達と手順に関係していると思います。