2

代理人の宣言の前に*がないことに気づきました...

私はこのようなことをしました:

@protocol NavBarHiddenDelegate;


@interface AsyncImageView : UIView {

    NSURLConnection* connection;
    NSMutableData* data;
    UIActivityIndicatorView *indicator;

    id <NavBarHiddenDelegate> delegate;

}

@property (nonatomic, assign) id <NavBarHiddenDelegate> delegate;

- (id)initWithUrl:(NSString*)url;

@end


@protocol NavBarHiddenDelegate 

- (void)hideNavBar;

@end

それは完全にうまく機能しますが、私はいつも慣れているので、私が宣言するオブジェクトの前に*を付けます、なぜこれではないのですか?!?

ありがとうございました、

ゴティエ。

4

2 に答える 2

1

idすでに暗黙のを持っているので*。プロトコル制限を無視すると、

id <NavBarHiddenDelegate> delegate;

になります

id delegate;

明らかに必要ありません*。ところで、プロトコルがObjCタイプに設定されている場合は*、たとえば、

XXViewController<NavBarHiddenDelegate>* delegate;
于 2010-03-20T13:32:37.443 に答える
1

これは代理人とは何の関係もありません。

id歴史的な理由から、タイプは異なります。と考えてany-object *ください。あなたが書くときはいつでもid、はありません*

すべてのObjective-Cオブジェクトに単一のルートクラスがあった場合Object、それは想像できますがtypedef Object * id;、そうではないので、id違います(実際、struct objc_object *正しく思い出した場合のように定義されていますが、心配する必要はありません。そのimplementation-detail-with-respect-to-this-level)。

于 2010-03-20T13:32:48.330 に答える