助けて :( 理由がわからない?
@interface RootViewController : UITableViewController {
BOOL isSearchOn;
}
self->isSearchOn = NO; ( no error)
self.isSearchOn = NO; ( error)
助けて :( 理由がわからない?
@interface RootViewController : UITableViewController {
BOOL isSearchOn;
}
self->isSearchOn = NO; ( no error)
self.isSearchOn = NO; ( error)
へのアクセスにはドット演算子.
を使用しますproperty
。
アロー演算子->
は、インスタンス変数にアクセスするために使用されます。
だからあなたは使う
self->isSearchOn = NO; // which is an instance not a property
スキップしてこの方法を使用することもできますself->
isSearchOn = NO;
-> は、ポインターによって参照される構造体のメンバーにアクセスする従来の C 演算子です。Objective-C オブジェクトは (通常) ポインターとして使用され、Objective-C クラスは構造体であるため、-> を使用してそのメンバーにアクセスできます。これは (通常) インスタンス変数に対応します。
また
ポインターアロー演算子に適用すると、ドット演算子をポインティに適用するのと同じになります (ptr->field は (*ptr).field と同じです)。
また
pSomething->someMember
と同等です
(*pSomething).someMember
. オブジェクトがあり、属性またはメソッドを参照したい場合に使用されますが、ポインターのみを保持する場合は -> を使用する必要があります。-> を使用する代わりに、* を使用することもできます。しかし、いずれにせよ、C のポインタについて読むべきだと思います。
ここには本質的に 3 つの演算子があり、そのうち 2 つは C から継承され、3 番目は Objective-C から継承されています。
C では、.
と->
は同じこと (構造体から値を取得する) を行いますが、構造-
体へのポインターを自動的に逆参照するため、次の 2 つの式は同等です。
(*a).b
a->b
2 番目の演算子は、単なる構文糖衣です。ただし、.
をポインターに適用した場合は意味がありません。使用する必要があります->
。
Objective-C では、.
オブジェクト ポインタ (すべての Objective-C オブジェクトはポインタであるため、ポインタのみ) を使用してプロパティ値を参照できます。これは、C 演算子が提供するよりもはるかに高いレベルの構造です。
したがって、.
on オブジェクトを使用して、インターフェイスで定義されたプロパティを取得できますが、例にある ivar (インスタンス変数) を直接取得@property
するために使用する必要があります。ただし、通常は、C の演算子を使用して変数を直接参照するよりも、Objective-C のプロパティを使用して変数を公開することをお勧めします。->
isSearchOn
->