2016-05-16 8 views
1

私は私のプロジェクトでは、 'override func didReceiveMemoryWarning(){}'が必要ですか?

override func didReceiveMemoryWarning() {

にここでエラーがエラーを得た:方法はそれのスーパークラスのいずれかを上書きしません。

質問:

は、コードoverride func didReceiveMemoryWarning()が私のプロジェクトにしておく必要がありますか?

私の悪い英語のために申し訳ありません。

+1

View Controllerのサブクラスを編集してもよろしいですか? – Desdenova

答えて

5

いいえ、そうではありません。必要があるまで削除してください。

衝撃的です、私は知っています、それはテンプレートの中にあることが推奨されています。しかし、何年にもわたってiOSを開発してきた中で、実際には4〜5回(実際にはメモリが限られていたiPhone 3GSに戻ってきたものがほとんどです)に役立つものがありました。率直に言って、新しい開発者にとっては、そのレベルでのリソース使用率の最適化について心配する準備が整うまで、私はそれを残しておきます。私はそれが解決するよりも混乱を招くと思う。メモリ警告コードが確実に動作することを確認するためのテストも行わない限り、そこに置くべきではありません。

アレッサンドロが指摘しているように、この方法はUIViewControllerサブクラスにのみ適用されます。 (他のタイプの場合は、UIApplicationDidReceiveMemoryWarningNotificationを見ることができます)。テンプレートの一部であるか、誰かがそれを持っているべきだと言われたので、ただそこに置いてはいけません。意味のあるメモリがない場合(そして正直なところ、View Controllerはめったにはならない)、オーバーライドを取り除くべきです。

+1

実際に質問には[osx]というタグが付きます。 –

+0

ええ、私はOS Xアプリケーションを作っています。しかし、それはthx働いた! – Sarcasm

+0

@悲しみ、heh。これはOS Xにも存在しないので、削除したいと思うでしょう... –

0

Apple developer libraryはそれを言う:

Sent to the view controller when the app receives a memory warning.

Your app never calls this method directly. Instead, this method is called when the system determines that the amount of available memory is low.

You can override this method to release any additional memory used by your view controller. If you do, your implementation of this method must call the super implementation at some point.

おそらくあなたはview controllerによって異なるクラス型で、この方法を設定してみてください。

これは正しいです:これはエラーある

class MyClass: UIViewController {  
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

class MySwitch: UIControl { 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

enter image description here

0

あなたはdidReceiveMemoryWarning()を持っていない必要を行うが、あなたです。

overrideキーワードを使用しているため、ここでエラーが発生しています。

キーワードoverrideは、「このメソッドは、スーパークラス内で同じ名前(didReceiveMemoryWarning())のメソッドをオーバーライドします。

スーパークラスにdidReceiveMemoryWarning()がない場合は、オーバーライドしていませんが、あなたはそうだと言います。それは誤りです。

メソッドをすべて一緒に削除するか、クラスをそのメソッドを実装するクラスのサブクラスにします。

関連する問題