2010-12-01 12 views
6

クラスのメンバーとして使用したときに、ブロックの構文を理解するのに役立つことを期待していました。私は実際にうまく働いているいくつかのコードを持っている:iOS 4 - ブロックをクラスのメンバーとして使用する

@class Structure; 
typedef void (^StructureDeleteCallback)(Structure *); 

@interface StructureListDelegate : NRFCTableDelegate 
{ 
    StructureDeleteCallback _structureDeleteCallback; 
} 

@property (nonatomic, copy) StructureDeleteCallback structureDeleteCallback; 

@end 

これは動作しますが、私はtypedef文の構文を理解したいと思います。実際にtypedefを使用する必要があるかどうかを判断します。

私が読んだことでは、この状況ではtypedefを使用することが推奨されています。なぜなら、コードをもっとはっきりさせるからです。私はtypedefなしでこれをしようとするとコンパイルすることができませんでした。

typedef [actual type] [new name for type]; 

ような::

typedef double CLLocationDegrees; 

しかし、私のtypedef文の構文は、これを一致していないのtypedefの私の理解では、構文は基本的だったということでした。だから、私の質問は以下のとおりです。

  • どのように私のtypedef 文の構文は、他の typedef文からとても異なる場合があります/私が使用している構文は、実際にコンパイラに何を意味するのでしょうか?
  • ブロックのメンバーとしてブロック を使用することはできませんtypedef

答えて

7

私自身はここにあなたの線に沿って質問をしていますBlock references as instance vars in Objective-C

私の答えherehereを参照してください。

+0

ああ!私はtypedefを使わなければそれを動作させることができませんでした。なぜなら、iVarを定義するための構文がまったく違うことに気付かなかったからです。私はまだ[typename] [iVarName]を持っていなければならないと思った。 – GendoIkari

+0

最後のことを明らかにするには... typedefにあるのかブロックを宣言するだけであろうと、基本的にはブロックが他の型よりも宣言する構文が異なりますか?コンパイラは^シンボルを見て、変数の名前が^の後にあることを知っています。これは、int x;ありがとう! – GendoIkari

+0

@Gendolkariあなたはそれを持っています! :) –

関連する問題