0

助けて :( 理由がわからない?

    @interface RootViewController : UITableViewController {
        BOOL isSearchOn; 
    }

    self->isSearchOn = NO; ( no error)
    self.isSearchOn = NO; ( error)
4

4 に答える 4

2

へのアクセスにはドット演算子.を使用しますproperty

アロー演算子->は、インスタンス変数にアクセスするために使用されます。

だからあなたは使う

    self->isSearchOn = NO; // which is an instance not  a property

スキップしてこの方法を使用することもできますself->

    isSearchOn = NO; 
于 2013-05-06T10:15:33.983 に答える
2

-> は、ポインターによって参照される構造体のメンバーにアクセスする従来の C 演算子です。Objective-C オブジェクトは (通常) ポインターとして使用され、Objective-C クラスは構造体であるため、-> を使用してそのメンバーにアクセスできます。これは (通常) インスタンス変数に対応します。

また

ポインターアロー演算子に適用すると、ドット演算子をポインティに適用するのと同じになります (ptr->field は (*ptr).field と同じです)。

また

pSomething->someMember

と同等です

(*pSomething).someMember

于 2013-05-06T10:16:52.367 に答える
0

. オブジェクトがあり、属性またはメソッドを参照したい場合に使用されますが、ポインターのみを保持する場合は -> を使用する必要があります。-> を使用する代わりに、* を使用することもできます。しかし、いずれにせよ、C のポインタについて読むべきだと思います。

于 2013-05-06T09:48:40.100 に答える
0

ここには本質的に 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->

于 2014-04-18T17:43:09.337 に答える