現在、objective-c を学習しています。物事を囲む角括弧は正確に何を意味し、それを使用することとピリオドを使用することの間に違いはありますか (私は .NET の世界から来たので、これは私にとってより簡単になります)。
ありがとう。
現在、objective-c を学習しています。物事を囲む角括弧は正確に何を意味し、それを使用することとピリオドを使用することの間に違いはありますか (私は .NET の世界から来たので、これは私にとってより簡単になります)。
ありがとう。
あなたの例では、どちらも同じことを行います。は.
、オブジェクトのプロパティにアクセスするために使用される一種の省略形です。 []
オブジェクトにメッセージを送信するために使用されます。あなたの例では、それらはたまたま同じものです。プロパティ名に直接マップされていないメッセージを送信しようとすると、違いに気付くでしょう。
例:[myString length]
とは同じですが、長さを設定myString.length
したい場合(例のために意味があると仮定しましょう)、orのようなことをする必要があります。それに加えて、次の例のように、プロパティ名と同じではないメッセージがあります。[myString setLength:newLength]
myString.length = newLength
[myString stringByReplacingOccurrencesOfString:@"hello" withString:@"world"];
.
省略形を使用した意味のある等価物はありません。
Objective-C はメソッドではなくメッセージを使用し、それが主な構文です (単純な get/set メッセージの代替としてドット構文が導入されました)。メソッドとメッセージには明らかな類似点がありますが、相違点もあります。
Objective-C では、オブジェクトは実行時にメッセージに応答する完全な柔軟性を備えています。たとえば、別のオブジェクトにプロキシすることにより、まったく予期しないメッセージを処理できます。または、実行時にメッセージを列にマップするなどの操作を実行できます。これは、Smalltalk にさかのぼる遺産に基づいています。
.NET は //でこの柔軟性を得ただけです。もちろん、どちらの言語でも、通常はコンパイル時に定義されたメソッド/メッセージ名の方が適切です。しかし、動的なものには注目すべき使用例があります。dynamic
DynamicObject
IDynamicMetaObjectProvider
もちろん、Objective-C は C のスーパーセットであるため、.
は他のもの (通常は構造体または共用体) に使用されます。