请问 id 这是什么语法?为什么这里要加尖括号?

endfun 2015-02-15 05:16:29
#import <UIKit/UIKit.h>

@protocol EveryFrameDelegate <NSObject>

- (void)DoSomethingEveryFrame;

@end

@interface GifView : UIView
{
NSTimer *timer;
id <EveryFrameDelegate> delegate;
NSInteger currentIndex;
}

@property (nonatomic, retain) id <EveryFrameDelegate> delegate;
\

请问 id <EveryFrameDelegate> 这是什么语法?为什么这里要加尖括号?
我觉得 EveryFrameDelegate delegate;就可以了啊,为什么EveryFrameDelegate delegate不行
...全文
289 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ReyZhang 2015-02-16
  • 打赏
  • 举报
回复
oc的语法 协议只能去实现,不能作为一个具体类型。所以不能使用
@property (nonatomic, assign) EveryFrameDelegate delegate;
来声明。而需要使用
@property (nonatomic, assign) id<EveryFrameDelegate> delegate;
表明,这个delegate是一个需要实现EveryFrameDelegate协议的对象。我们在一个类中如果要实现某个协议会像如下这样:
@interface viewController:UIViewController <EveryFrameDelegate>
@end
还有一点注意的地方就是将协议声明为属性时的修饰。不应使用retain ,而是assign. 表示它们之间是一个弱引用的关系。避免直接在类中包含另一个类的指针引用(强引用),增加藕合度。
ioscoco 2015-02-15
  • 打赏
  • 举报
回复
你看上面写了是protocol id <EveryFrameDelegate>这个就表明遵循了这个协议 这是oc语法规定

29,046

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧