类别和协议

类别是另一种为现有类添加新行为的方法。不同于子类,类别实际上是oc的一种动态行为,它利用了运行时分配机制。因此,类别甚至不需要拥有原类的源代码。此外,类别不能向现有的类中添加实例变量。

类别有很多好处,比如把类的实现分散到多个implementation文件里,或者用于创建非正式协议;

类别也有一些限制,在类别的使用中一定要注意两点:

类别仅仅是一堆方法的集合,你无法为类添加实例变量。

类别不能解决命名冲突,如果类别中的方法与类原有的方法重名,则类中的方法被覆盖。

oc中的协议等同于java接口的概念,协议看起来就像类别的生命,还是一堆方法声明的集合。

正式协议的意思是,每个采用这份协议的类必须实现这份协议中的所有方法,这种说法一直持续到oc2.0,从oc2.0开始,协议中的方法可以有选择的由类实现。对于必须实现的方法,用关键字@required修饰,对于可选择性实现的方法,使用@optional关键字修饰。

非正式协议不需要采用@protocol关键字声明,但需要创建一个类别。

时间: 2025-01-02 17:26:00

类别和协议的相关文章

《Effective Objective-C 2.0》—(第23-28条)—类别、协议,代理,匿名对象、delegate

第23条:通过委托与数据源协议进行对象间通信 对象之间经常需要相互通信,而通信方式有很多.OC开发者广泛使用一种名叫"委托模式"(Delegate Pattern)的编程设计模式来实现对象间的通信,该模式的主旨是:定义一套接口,某对象若想接收另一个对象的委托,则需遵从此接口,以便称为"委托对象"(delegate).而这"另一个对象"则可以给其委托对象回传一些信息,也可以在发生相关联时间时通知委托对象. 此模式可以将数据与业务逻辑解耦. 在Obj

黑马程序员 委托模式--类别、协议、Block篇

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>. <a href="http://www.itheima.com"target="blank">.Net培训</a>.期待与您交流! ----------------------- 委托模式--类别.协

【IOS 开发】Object - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射

一. Object-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, int, long, float, char, id, 指针 等数据; -- NSNumber 包装类 : 用于包装 C 语言数据类型; NSNumber 方法 : -- "+ numberWithXxx :" : 将特定类型的值包装成 NSNumber; -- "- initWithX

objective-C 类别/协议。

第十二章 类别 类别: 命名方式: 类名称+类别名称. 在Xcode中可以在新建文件的类别中找到 Objective-C category图标. @interface部分 类别的声明看起来非常像类的声明: @interface NSString (NumberConvenience) -(NSNumber *) lengthAsNumber; @end 括号内(NumberConverience)叫做类别名,且它是添加给NSString类的. 整句话可以理解为:我们为NSString类添加了一个

OC学习总结5 属性,初始化,类别,协议

属性的实现 成员变量只能在类内部使用,属性是可以被外界访问的. 1.属性的声明 #import <Foundation/Foundation.h> @interface QYPerson : NSObject { NSString *_name; } //@property是编译指令,帮助直接生成setter和getter方法,以及成员变量 @property (readonly, nonatomic) NSString *identify; @property (nonatomic) NSS

ios 中Category类别(扩展类)专题总结

原创地址   http://www.code4blog.com/archives/294 类别 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为任何类添加新的方法,包括那些没有源代码的类. 类别使得无需创建对象类的子类就能完成同样的工作 一.创建类别 1.声明类别 声明类别与声明类的形式很相似 @interface  NSString(NumberConvenienc

[学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十二章 类别

12.1 创建类别 类别(category)是一种为现有的类添加新方法的方式 例:获取字符串的长度并存入NSDictionary字典中 不使用类别的方式: NSNumber *number; number = [NSNumber numberWithUnsignedInt: [string length]]; // ... do something with number 使用类别的方式: 类别的声明: @interface NSString (NumberConvenience) - (NSN

基于RDP协议的瘦客户机简介

*************************************************************************************************************************** 作者:EasyWave                                       时间:2014.06.13 类别:协议标准-RDP协议简介              声明:转载,请保留链接 注意:如有错误,欢迎指正.这些是我学习的日

基于RDP协议的开源rdesktop简介

*************************************************************************************************************************** 作者:EasyWave                                       时间:2014.06.13 类别:协议标准-RDP协议简介              声明:转载,请保留链接 注意:如有错误,欢迎指正.这些是我学习的日