Code Bye

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

 
#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不行


10分
你看上面写了是protocol
 id <EveryFrameDelegate>这个就表明遵循了这个协议
这是oc语法规定

10分
oc的语法 
协议只能去实现,不能作为一个具体类型。所以不能使用 
@property (nonatomic, assign) EveryFrameDelegate delegate;

 
来声明。而需要使用

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

 
表明,这个delegate是一个需要实现EveryFrameDelegate协议的对象。我们在一个类中如果要实现某个协议会像如下这样:

@interface viewController:UIViewController <EveryFrameDelegate>
@end

还有一点注意的地方就是将协议声明为属性时的修饰。不应使用retain ,而是assign. 表示它们之间是一个弱引用的关系。避免直接在类中包含另一个类的指针引用(强引用),增加藕合度。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明请问 id <EveryFrameDelegate> 这是什么语法?为什么这里要加尖括号?