メッセージとCスタイルの関数をいつ使用する必要がありますか?
3 に答える
Objective-cはあなたのためにその区別をします。メッセージはオブジェクトに送信する必要がありますが、関数はいつでも使用できます。
Objective-Cメッセージはオブジェクトにのみ送信でき、メッセージングシステムはクラスのメソッドを呼び出す方法です。
例:
// a class interface definition
// including a method named aMethod
@interface ANObject
{
}
- (void)aMethod;
@end
// a message sent to that object:
ANObject * myObject = [[ANObject alloc] init];
[myObject aMethod]; // <-- message
[myObject release];
関数:
Objective-CはすべてのC言語を継承するため、状況に応じてCスタイルの関数呼び出しがサポートされ、さらに推奨されます。Objective-Cオブジェクトは単純にポインタとして渡されるため、引数として関数に渡すことができます。もちろん、関数へのポインタの受け渡しに関する通常の注意と規則を尊重する必要があります。
例:
// a regular C-style function
void someFunction(ANObject * argument)
{
// do something here...
}
// and how to call it:
someFunction(someObject);
それぞれをいつ使用するのですか?
オブジェクト/クラスのプロパティにアクセスする場合は、メッセージ/メソッドを使用します。良い例は、NSStringの長さにアクセスすることです。
int stringLength = [myString length];
プロパティの値の設定:
[myObject setHidden:YES];
または、オブジェクトにタスクを実行するように指示します。
[myAccount withdrawMoneyAndDriveToMexico];
クラスに属していないタスクを実行する場合は、Cスタイルの関数を使用します。スタンドアロンである必要がある何か。良い例は、次のような数学関数です。
double degrees = ConvertRadiansToDegrees(radians);
基本的に、ObjectiveCコンポーネントを扱うときはいつでもメッセージを使用してください。NS*タイプを使用しているときはいつでも多かれ少なかれ。
裏では、基本的にC関数呼び出しを使用しています。Objective Cの元の実装はCのプリプロセッサでした。しかし、Objective Cを使用することの全体的なポイントは、[]内のどこかにある構文のようなSmalltalkを取得することです。
あなたは多くのJavaの質問をしました。おそらくJavaのアナロジーが役立つでしょう。Javaでメソッドを使用する場合は、Objective-Cでメッセージを使用します。Javaで静的メソッドを使用する場合は、Objective-Cでクラスメソッドを使用します。静的メソッドでいっぱいのユーティリティパッケージをJavaで作成していることに気付いた場合、それはObjective-Cの関数として意味があるかもしれません。
そしてもちろん、奇妙なObjective-C++のこともやっているのならそれは理にかなっているかもしれません。