2016-08-31 3 views
2

は、クラス怒鳴るを考えてみましょう:Swiftのクラス機能の重要性は何ですか?

class Downloader { 

    class func downloadImageWithURL(url:String) -> UIImage! { 
     let data = NSData(contentsOfURL: NSURL(string: url)!) 
     return UIImage(data: data!) 
    } 

} 

は、クラスメソッドではなく、インスタンスメソッドとしてdownloadImageWithURLを宣言することの利点は何ですか?

+0

要するに、関数がクラス関数として宣言されている場合、オブジェクトを作成する必要はありません。したがって、メモリを節約する – Shubhank

答えて

3

あなたはこの型メソッドを呼び出したい場合、あなたはそれがインスタンスメソッドある場合は、あなたが最初のオブジェクトを作成する必要が

Downloader.downloadImageWithURL(...) 

を書く:他に

let downloader: Downloader = Downloader() 
downloader.downloadImageWithURL(...) 

あなたが話すことになる言語(例えば、C++、Java)static vs. non-static functions

それ自体に利点または欠点はありません、それは設計決定、非常に重要なものです!現在、私の心に刻まれている経験則は、状態情報を維持する必要がない場合は型メソッドを使用し、それ以外の場合はインスタンスメソッドを使用します.¹

Swift Langauge Referenceでこれらのメソッドの詳細を読んでください。


¹同時に私はこの経験則を書きましたが、いくつかの反例が私の頭に浮かんできました。だからこれを非常に大まかな経験則として考えて、オブジェクト指向設計についてのより良い紹介を読んでください。

1

インスタンスメソッドは、指定されたクラスの具体的なインスタンスで動作しますが、型メソッドは動作しません。

インスタンスなしでインスタンスメソッドを呼び出すことはできません。しかし、それはパフォーマンスの決定だけではなく、方法が何であるかを伝えることです。

経験則として、クラスの(インスタンス)プロパティにアクセスしない場合は、おそらくタイプメソッドである必要があります。ファクトリメソッドは、型メソッドの良い例ですが、クラスに密接に関連していてインスタンスに結び付けられていないものもあります。

関連する問題