zoukankan      html  css  js  c++  java
  • 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文件中,方便管理和协同开发。

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

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

     

  • 相关阅读:
    利用DTrace实时检测MySQl
    改进MySQL Order By Rand()的低效率
    RDS for MySQL查询缓存 (Query Cache) 的设置和使用
    RDS For MySQL 字符集相关说明
    RDS for MySQL 通过 mysqlbinlog 查看 binlog 乱码
    RDS for MySQL Mysqldump 常见问题和处理
    RDS for MySQL Online DDL 使用
    RDS MySQL 表上 Metadata lock 的产生和处理
    RDS for MySQL 如何使用 Percona Toolkit
    北京已成为投融资诈骗重灾区:存好骗子公司黑名单,谨防上当!
  • 原文地址:https://www.cnblogs.com/s-y-j/p/5757571.html
Copyright © 2011-2022 走看看