Objective-C中协议和分类总结

协议:

  • 协议不是一个类:它只能声明方法而不能有任何实例变量,它有两种类型:正式协议和非正式协议,并且协议只有声明文件,没有实现文件。正式协议是方法的集合,遵循了正式协议的类中必须要实现协议中的所有方法,一个类可以遵循的协议数量没有限制。非正式协议也是一系列方法的集合,但是遵循非正式协议中的类中可以根据自己的需要选择实现协议中的方法,即非正式协议中的方法可以不实现。
  • 声明一个协议的一般格式:

    @protocol protocolName<protocol,…>

    requiredMethodDeclarations //默认是被@required修饰

    @optional

    optionalMethodDeclarations

    @required

    requiredMethodDeclarations

    @end

  • 被@optional修饰的方法是可以选择实现的,而被@required修饰的方法是必须要实现的。
  • 协议通常是不与任何类有特定的关联,只是为所有的类提供了一个公有的接口。
  • 协议定义没有对应的实现部分,在遵循协议的类中实现协议中的方法,如果类遵循了多个协议,协议之间用,隔开,实现的协议中的方法是可以继承的。(当某个类遵循了某些协议之后,就相当于该类拥有了这些协议中的方法)
  • 如果让类遵循NSCopying协议,则声明文件如下:

    @interface XYPoint:NSObject<NSCopying>

  • copyWithZone:方法实现:

    –(id)copyWithZone:(NSZone *)zone //NSCopying协议中的正式方法

    {

       XYPoint *newPoint =[[XYPoint allocWithZone:zone] init];

      [newPoint setX:x andY:y];//将旧对象的实例变量拷贝到新对象中

      //x和y:是要拷贝的旧对象的实例变量

      return newPoint;

    }

分类试用范围:

  • 1.当你已经封装好了一个类,不想改动它,可是随着程序功能的增加,需要在类中增加1个方法,这时候没必要修改主类,只需要给原来的类增加一个分类。
  • 2.将一个大型的类拆分成不同的分类,在不同的分类中实现声明的方法,这样可以将一个类的实现写到多个.m文件中,方便管理和协同开发。

    分类中只能添加方法,不能添加实例变量。

    分类中方法的优先级比原来类中的方法高。

时间: 2024-08-29 20:37:17

Objective-C中协议和分类总结的相关文章

黑马程序员------OC中协议和分类

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- OC中没有想C++中的多继承,是利用分类和协议来实现的. 分类是在不影响原有存在类的基础上,为原有类添加属性和方法. 协议:一般只是声明方法.遵守了协议的类,才会去实现协议中的方法. 协议一般和代理的一起使用.分类,一般是为系统中的类添加

objective C中继承、协议、分类和多态的实现

第一.objective C中继承的实现 在oc中只有实例变量会有权限控制,实例方法和类方法是没有权限控制的,这点与c++不同,OC默认的是protected,并且在声明权限控制时,没有分号 在OC中可以像C++一样用指针运算法来访问实例变量 Rectangle.h 文件代码: #import <Foundation/Foundation.h> @interface Rectangle : NSObject { int _width; int _height; } @property (non

Objective-C Runtime 运行时之五:协议与分类

Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的接口定义方式,即在一个类中通过@protocol定义接口,在另外类中实现接口,这种接口定义方式也成为“delegation”模式,@protocol声明了可以呗其他任何方法类实现的方法,协议仅仅是定义一个接口,而由其他的类去负责实现. 在本章中,我们来看看runtime对分类与协议的支持. 基础数据

Swift中协议的简单介绍

熟悉objective-c语言的同学们肯定对协议都不陌生,在Swift中苹果将 protocol 这种语法发扬的更加深入和彻底.Swift语言中的 protocol 不仅能定义方法还能定义属性,配合 extension 扩展的使用还能提供一些方法的默认实现,而且不仅类可以遵循协议,现在的枚举和结构体也能遵循协议了.基于此本文从 1,协议中定义属性和方法 , 2,协议的继承.聚合.关联类型 , 3,协议的扩展 , 4,Swift标准库中常见的协议 , 5,为什么要使用协议 5个方面结合自身的学习经

OC中协议, 类目, 时间, 延展, 属性

必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @property (nonatomic, assign) id<marryprotocol> husband; 避免Optitonal没有实现的功能 if ([_husband respondsToSelector:@selector(driver)]) { [_husband driver]; } @required//必须实现的协议, 默认协议 - (void)s

[转]Objective-C Runtime 运行时之五:协议与分类

Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的接口定义方式,即在一个类中通过@protocol定义接口,在另外类中实现接口,这种接口定义方式也成为“delegation”模式,@protocol声明了可以呗其他任何方法类实现的方法,协议仅仅是定义一个接口,而由其他的类去负责实现. 在本章中,我们来看看runtime对分类与协议的支持. 基础数据

Objective-C Runtime 运行时之五:协议与分类(转载)

Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的接口定义方式,即在一个类中通过@protocol定义接口,在另外类中实现接口,这种接口定义方式也 成为“delegation”模式,@protocol声明了可以呗其他任何方法类实现的方法,协议仅仅是定义一个接口,而由其他的类去负责实现. 在本章中,我们来看看runtime对分类与协议的支持. 基础数

理解Objective-C Runtime (五)协议与分类

Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的接口定义方式,即在一个类中通过@protocol定义接口,在另外类中实现接口,这种接口定义方式也成为“delegation”模式,@protocol声明了可以呗其他任何方法类实现的方法,协议仅仅是定义一个接口,而由其他的类去负责实现. 让我们来看看runtime对分类与协议的支持. 基础数据类型 C

Java NIO之Java中的IO分类

前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了,终于要说到了Java中的各种IO了.我也是边学边理解,有写的不对的地方,欢迎小伙伴们指出和补充. Java中的IO分类 BIO BIO是指 Blocking IO 在JDK1.0的时候就引入了,直到JDK1.4一直都是Java中唯一的IO方式.它的主要实现方式就是,一个线程执行一个请求,如果请求数