zoukankan      html  css  js  c++  java
  • 协议与非正式协议

    //协议

    #import <Foundation/Foundation.h>

    //定义一个协议类

    @protocol mDelegate <NSObject>

    @required

    - (void)thisIsADelegateMethodYouMustAchive;

    @optional

    - (void)thisIsADelegateMethodYouCanNotAchive;

    @end

    @interface Delegate : NSObject

    @property (nonatomic, retain) id<mDelegate>delegate;

    - (void)thisIsAMethodToShowHowToUseDelegate;

    @end

    #import "Delegate.h"

    @implementation Delegate

    - (void)thisIsAMethodToShowHowToUseDelegate

    {

        //告诉遵循这项协议的类什么时候实现这个协议中的方法

        [_delegatethisIsADelegateMethodYouMustAchive];

        [_delegatethisIsADelegateMethodYouCanNotAchive];

    }

    @end

    /*协议:

     1、协议是多个类共享的一个方法列表。协议中列出的方法在本类中没有相应的实现,由其他遵循了该协议的类来实现

     2、协议不引用任何类它是无类型的(classless

     3、如果一个类遵循了某项协议,其子类遵循这项协议(但这并不意味着对于该子类,也需要实现协议中的方法)

     4、使用可以使用 conformsToProtocol: 来检测一个方法是否遵循某协议如:

        id test;

        [test conformsToProtocol:@protocol(mDelegate)];

     5、协议名必须唯一

     6、协议中有两个属性@required@optional

        @required属性的要求遵循协议的类必须要实现这协议列表中的所有方法

        @optional属性则没有这个要求,你可以实现也可以不实现,还可以实现其中的几个方法

     非正式协议:

        非正式协议实际上是一个分类,列出了一组方法但没有实现他们,这组方法的实现由该类的子类去选择实现,

     并且在子类的接口部分需要重新声明这些方法。

     Objective-C 2.0 中用协议的@optional指令取代了非正式协议*/

  • 相关阅读:
    图的广度优先遍历,运用了数据结构,感觉非常好用,等会把深度优先遍历也用数据结构写一遍
    DFS之素数环问题
    图的深度优先遍历
    八皇后的详细解答,纯手打,求推荐!!!
    c++中priority_queue的用法
    c++中vector的用法
    #ifndef是什么意思????
    筛法求1000000以内素数个数---时间复杂度为o(n)
    C++中1/0和1/0.0的区别
    C++程序生成.exe文件,在文件夹中运行时闪现问题
  • 原文地址:https://www.cnblogs.com/chenhaosuibi/p/3440656.html
Copyright © 2011-2022 走看看