文档章节

OC 分类 协议

卧龙小
 卧龙小
发布于 2014/10/26 23:34
字数 417
阅读 138
收藏 0

一 分类

1.分类的概念

在不改变类的情况,下进行类的扩展


建分类文件

new->file->cocoa->objective-c category


2.需要分类的原则

在添加方法时,不要去修改不是自己写的类,而是通过分类。


3.分类的用法

具有相同功能的方法放在一个分类中。


4.使用注意

 4.1.分类不能定义成员变量

 4.2.分类中可以访问原类的属性和方法。

 4.3.如果分类中重复定义类原类重复的方法,原类方法会被覆盖掉

 4.4.如果有多个分类具有相同方法,通过改变编译顺序改变调用方法顺序。


5.使用场景

可以对系统类进行扩展


二 协议

协议就是声明一些方法,协议本身并不提供方法的实现,谁遵守了协议,谁实现协议方法。

所有协议都遵守NSObject基础协议。  

协议是一种思想体现,向上抽象,把公用的功能抽象出来,放在协议文件中。


1.创建协议文件

new->file->cocoa->objective-c protocal

文件以@protocol关键字声明,协议只有.h文件,文件中只能声明方法。


2.实现协议

@interface  ClassName:NSObject<protocolname1,protocolname2>

多个协议用,隔开


3.协议方法修饰符

@requaired 必须实现 (默认)

@optional 选择实现


4.创建协议对象

ClassName<ProtocolName> *className =[[ClassName alloc]init];


5.继承关系解耦

继承->组合->通过ID万能指针动态绑定(但是无法提示方法)。

在ID绑定是通过协议约束 id<protocolName>(代理模式)



© 著作权归作者所有

卧龙小
粉丝 42
博文 146
码字总数 70107
作品 0
西城
程序员
私信 提问
从 OC 到 Swift 的快速入门与专业实践

只会介绍与 OC 有明显区别的地方,不会介绍 OC 中没有的,比如元组。当前总结也只是蜻蜓点水而已,但是有 OC 的基础,看这些已经足够。 一、数据 Swift 是类型安全的语言: Swift 必须明确数...

CoderHG
2018/08/04
0
0
OC语言自学《十二》---- OC(block、@property)

一、block 如何定义block变量 int (^sumblock)(int,int) 如何利用block封装代码 //有参数,无返回值^(int a, int b){ }; //没有参数,没有返回值 ^{ } block访问外部变量 block内部可以访问外...

罗眯眯
2014/04/08
1K
0
Swift类扩展使用方法

Swift是没有OC中的分类的. 但可以进行类扩展, 一般用于实现代理方法. 类扩展中无法定义属性 使用方法: extension <#当前控制器名#>: <#代理协议#> { <#code#> } Swift中如果必须实现的代理方...

阴雨音语
2016/04/11
236
0
Category中的方法为什么会覆盖原来类中的方法?

常见面试题:介绍一下分类,能用分类做什么?内部是如何实现的?它为什么会覆盖掉原来的方法? 深入了解Category 我们都知道OC代码执行时会先转成CC++代码,OC对象转成对应的结构体; Catego...

coderLZ
2018/05/09
0
0
Swift和OC的相互调用

swift调用OC 创建一个 OC 的类 选择红色桥接 4.jpg 注意:桥接是一个 .h文件,如果没有选中则可以 根据下图的路径自己创建一个.h文件,填充路径 在桥接的文件里面 导入OC的头文件,系统会转换...

追逐iOS
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
61
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
29
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
66
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
59
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部