-Protocol,协议
-Extention,扩展,声明
-Category范畴,策略,分类(很像扩展概念)
Protocol用法
你可以新建一个protocol文件,也可以在任意类的头文件中@protocol,
@option为可选实现,
@require为必须实现,
@property为协议属性,遵循了协议就代表拥有协议的属性和方法,类实例可以调用协议的属性(需要@sythesize实现属性的set和get以及内部变量生成)
#import <Foundation/Foundation.h>
@protocol protocolTest <NSObject>
@property(nonatomic,readonly)id<protocolTest> proDelegate;
-(void)protocalTest;
-(NSString *)protocalName;
@end
// 新建一个UIView类遵循protocolTest
@implementation testView
@synthesize _proDelegate;// 注意!!!!!!这里需要synthesize声明,如果不想这样,可以在testView.h声明一个属性//@property(nonatomic,readonly)id<protocolTest> proDelegate;
proDelegate可以调用
-(void)protocalTest;
-(NSString *)protocalName;
[_proDelegate protocalTest];
NSString *temp = [_proDelegate protocalName];
然后你可以在其他的类中比如viewController初始化testView,testView *view = [[testView alloc] init]并且设置testView.delegate = self;系统会提示你写代理必须实现的方法,然后你就可以愉快的在viewcontroller中写代理方法了
Extention的用法
下面是一个UIView的Extension
#import <UIKit/UIKit.h>
@interface UIView ()
-(void)extentionTest;
@end
然后有啥用呢,你可以向任意继承UIView的组件发extentionTest消息,前提你得在这个实例的类中实现这个方法。注意:写在.m文件的扩展是私有的,写在.h内的事公有的。
还有一种用途是通过extention修改原来类的属性的read/write权限,当然还有其他的用法,有兴趣自行扩展查阅一下。
Extention的用法
可以用来对系统原有类进行方法和属性扩展,有很多细节的地方,其中就有runtime的知识点,大家有兴趣翻我上一篇文章iOS属性property及其关键字
网友评论