代表宣言面前为什么没有*?

时间:2010-03-20 13:28:14

标签: iphone delegates protocols declaration standards-compliance

我刚注意到代表声明前面没有* ......

我做了类似的事情:

@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

它的效果非常好,但是我习惯于在我宣称的对象面前总是这样,为什么不这样做?!

谢谢,

高堤耶。

2 个答案:

答案 0 :(得分:1)

因为id已经隐含了*。如果忽略协议限制,那么

id <NavBarHiddenDelegate> delegate;

变为

id delegate;

显然不需要*。顺便说一句,如果协议被置于ObjC类型,那么你需要*,例如

XXViewController<NavBarHiddenDelegate>* delegate;

答案 1 :(得分:1)

这与代表无关。

由于历史原因,id类型不同;把它想象为any-object *。每当您撰写id时,都没有*

如果所有Objective-C对象都有一个根类Object,那么您可以想象typedef Object * id; - 但没有,所以id是不同的(实际上, ,如果我没记错的话,它被定义为像struct objc_object *这样的东西,但你不应该担心这个实现 - 细节 - 尊重这个级别。)