我刚注意到代表声明前面没有* ......
我做了类似的事情:
@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
它的效果非常好,但是我习惯于在我宣称的对象面前总是这样,为什么不这样做?!
谢谢,
高堤耶。
答案 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 *
这样的东西,但你不应该担心这个实现 - 细节 - 尊重这个级别。)