iOS之Protocol,Extention,Category

2019-04-22  本文已影响0人  鹏雨燕

-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及其关键字

上一篇下一篇

猜你喜欢

热点阅读