iOS开发之OC入门(协议、代理)

协议:protocol

专门用来声明一大堆方法,不能声明属性,也不能实现方法,只能用来写方法的声明
只要某个类遵守这个协议,就相当于拥有这个协议中的所有方法声明,需要自己写实现
协议就是用来写方法声明,用来被类遵守的

/// 协议
@protocol 协议名称 <NSOject>
方法的声明;
@end

@protocol MyProtocol <NSOject>
-(void)run;
-(void)sleep;
@end

/// 使用
@interface 类名: 父类名 <协议名称,协议名称>
@end
  • 不写实现协议中的方法,不会报错,编译器会警报
  • 类可以单继承,协议可以多遵守
  • 所有的协议都直接或者间接从NSObject协议继承

@required与@optional

@required修饰的方法的声明,就必须实现,编译器会警告,默认属性
@optional修饰的方法的声明,可以实现或者不实现,不实现编译器也不会警告

@protocol MyProtocol <NSOject>
@required
-(void)run;
@optional
-(void)sleep;
@end

协议可以继承(多继承)

@protocol A协议 <B协议>//A继承B
方法的声明;
@end
  • Foundation框架中,有一个类叫做NSObject,是所以OC类的基类
  • Foundation框架中,有一个协议叫做NSObject,基协议
  • NSObject协议被NSObject类遵守,NSObject协议中所有方法,OC类都有
  • 类的名称可以跟协议一样

协议类型的限制

声明一个指针可以指向任意对象,但是要求指向的对象要遵守指定的协议(多个协议),否则警告

NSObject<协议,协议> *obj1
id<协议,协议> obj2

NSObject<协议> *obj1 =  [Student new];
id<协议> obj2 =  [Student new];

代理delegate

代理的数据类型:id<协议> delegate;

代理协议写在头文件中

代理协议可以选择写在头文件中@interface上面,读取头文字自动读取

#import <UIKit/UIKit.h>
@class CZFooterView;
@protocol CZFooterViewDelegate<NSObject,UIScrollViewDelegate>
-(void)footerViewUpdateData:(CZFooterView *)footerView;
@end

@interface CZFooterView :UIView
@property(nonationic,weak) id<CZFooterViewDelegate> delegate;
@end
@implementation CZFooterView;
- (IBAction)btnLoadMoreClick {
  // 检查代理对象的方法是否实现了
  if([self.delegate respondsToSelector:@selector(footerViewUpdateData:)]) {
  	// 执行代理对象的方法
  	[self.delegate footerViewUpdateData:self];
  }
}
@end
控制器
// 添加协议<CZFooterViewDelegate>
// 设置代理对象
footerView.delegate = self;

- (void)footerViewUpdateData:(CZFooterView *)footerView {
	//完成数据传输
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值