私は関数型プログラミングに慣れています。iOS用に書いているので、インスタンスを(-から)作成するのではなく、クラスメソッド(+)を頻繁に使用しています。
通常、私は、非同期リクエストの送信、データベースの更新、設定の保存/取得など、小さな繰り返しのタスクにクラスメソッドを使用します。
これは正しいことですか、それとも考え方を変えて、代わりにインスタンスの使用を開始する必要がありますか?クラスメソッドを一緒に使用することを避けることさえ可能ですか?
私は関数型プログラミングに慣れています。iOS用に書いているので、インスタンスを(-から)作成するのではなく、クラスメソッド(+)を頻繁に使用しています。
通常、私は、非同期リクエストの送信、データベースの更新、設定の保存/取得など、小さな繰り返しのタスクにクラスメソッドを使用します。
これは正しいことですか、それとも考え方を変えて、代わりにインスタンスの使用を開始する必要がありますか?クラスメソッドを一緒に使用することを避けることさえ可能ですか?
私の最善の推奨事項は、FoundationとCocoaがどのように機能しているかを確認し、同様に実行することです。Objective-Cにはクラスメソッドの場所があります。
クラスメソッドの例としては、次のものがあります。
[UIView animateWithDuration:0.3 animations:^{
// Animation here...
}];
と
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *date, NSError *error) {
// Handle response here ...
}];
インスタンス変数への暗黙的なアクセスを必要としない機能をカプセル化するために、ObjectiveCでサポートされている3番目の選択肢があります。これは「プレーン」C関数を使用しています。クラス関数とは異なり、「プレーン」C関数は仮想ディスパッチを使用しません。これは、さまざまなタイトループで重要になる場合があります。
クラスメソッドは、たとえばJava、C ++、C#のメソッドよりも多くの機能を提供することに注意してくださいstatic
。オーバーライドをサポートし、基本クラスのクラスメソッドが派生クラスのより具体的な実装を使用できるようにします。
クラスメソッドは、クラスのインスタンスが不要な場合に使用され、目的は次のようなメソッド呼び出しによってのみ提供されます。[[NSUserDefaults standardUserDefaults] synchronize];
MRCで
alloc/init
組み合わせはあなたに所有権の参照を与えます。つまりrelease
、後でそれをしなければならないということです。classMethodは、所有していない参照を返します。あなたはそれを解放することはできません。
すなわち、
Person *firstPerson=[Person personWithName:@"AnoopVaidya" address:@"India"];
ARCでは、上記の場合、そのような違いはありません。