@protocol Eat <NSObject> @required //必须实现 - (void)eat; @optional - (void)watch; //可选实现 @end
#import “eat.h”
@interface Man : NSObject <Eat>
@end
@implementation Man
- (void)eat {
NSLog(@"Man eat”);
}
- (void)watch {
NSLog(@"Man watch”);
}
@end
===============================
#import “eat.h”
@interface Dog : NSObject <Eat>
- (void)eat {
NSLog(@"Dog eat");
}
@end
#import “eat.h”
#import “Man.h”
#import “Dog.h”
int main(int argc, const char *argv[]) {
Man *man = [[Man alloc] init];
[man eat]; //输出 Man eat
return 0;
}
@interface Man : NSObject <Eat> // 声明一个指向代理对象的指针变量,遵循Eat,协议一般使用弱引用,若用强引用,会造成双向代理死锁问题
@property (nonatomic,retain) id <Eat> delegate; @end
#import “eat.h”
#import “Man.h”
#import “Dog.h”
int main(int argc, const char *argv[]) {
Man *man = [[Man alloc] init];
Dog *dog = [[Dog alloc] init];
man.delegate = dog;
[man eat]; //输出 Dog eat
return 0;
}
原文:https://www.cnblogs.com/sunada2005/p/15101241.html