定义:为现有的工程中的类和系统类添加新的方法
类 就是我们创建的 类,系统类就是类似NSObject类
在类.h的最后面
@interface Tool (ToolCategory )
//{
// NSString *_property2;
//类目中不能添加实例变量
//}
//ios运行时机制,
//IOS运行时机制,简单来说就是,苹果为开发者提供的一套运行时动态创建类.方法.属性的API,它是一套纯C语言的API
@property(nonatomic,strong)NSString *property2; //属性
- (void)function2;
@end
@implementation Tool (ToolCategory)
- (void)function2{
NSLog(@"function");
}
在类的.m 文件头文件
@interface MyClass ()
- (void)testExtension;
@end
@implementation MyClass
在方法中间- (void)test2{
[self testExtension];
}
@required 标注的方法为必须的方法(默认)
@optional 标注的方法为可选实现
@protocol FoodProtocol <NSObject>
- (void)sendFood:(BOOL)flag;
@optional
- (void)sayHello;
@end
@interface Student : NSObject
@property (nonatomic,assign)BOOL flag;
//声明了一个必须实现协议的对象,使用assign 或者weak,为了防止循环引用
@property (nonatomic,assign)id<FoodProtocol>delegate ;
@end
- (void)setFlag:(BOOL)flag{
//confromToProtocol:确定了一个对象是否实现了某个协议
//如果代理存在并且代理遵循了某个协议
_flag = flag;
if (self.delegate && [self.delegate conformsToProtocol:@protocol(FoodProtocol)]) {
[self.delegate sendFood:_flag];
}
else{
NSLog(@"代理不存在");
}
}
//实现协议里面的方法
@interface Waiter : NSObject <FoodProtocol>
到.m文件里写方法
- (void)sendFood:(BOOL)flag{
if (flag) {
NSLog(@"学生忙,我给你送外卖");
}
else{
NSLog(@"学生有空,你自己过来拿");
}
}