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 *,但你不应该担心与此级别相关的实施细节)。

于 2010-03-20T13:32:48.330 回答