• ios委托delegate与协议protocol


    监控控应用程序的高级行为是应用程序委托对象的责任,而应用程序委托对象是您提供的定制类实例。委托是一种避免对复杂的UIKit对象(比如缺省的UIApplication对象)进行子类化的机制。在这种机制下,您可以不进行子类化和方法重载,而是将自己的定制代码放到委托对象中,从而避免对复杂对象进行修改。当您感兴趣的事件发生时,复杂对象会将消息发送给您定制的委托对象。您可以通过这种“挂钩”执行自己的定制代码,实现需要的行为。

      应用程序的委托对象负责处理几个关键的系统消息。每个iPhone应用程序都必须有应用程序委托对象,它可以是您希望的任何类的实例,但需要遵循UIApplicationDelegate协议,该协议的方法定义了应用程序生命周期中的某些挂钩,您可以通过这些方法来实现定制的行为。虽然您不需要实现所有的方法,但是每个应用程序委托都应该实现“处理关键的应用程序任务”部分中描述的方法。

      

      协议仅仅声明方法,用作接口,本身并不实现,遵循该协议的类则负责具体实现。比如类B遵循协议test_protocol,则类B需实现该协议中声明的方法func;当类A需要执行方法func时,可以自己不实现func,而委托B实现。

      Demo:

     1 // 声明协议

     2 @protocol TestProtocol<NSObject>

     3 -(void)Print;              

     4 @end

     5

     6 @interface A : NSObject{

     7 id<TestProtocol> _delegate;

     8 }

     9 @property(retain,nonatomic) id<TestProtocol> _delegate;  

    10 -(void)Start;

    11 @end

    12

    13 @interface B : NSObject<TestProtocol>{

    14     A* _test;

    15 }

    16 @property (retain,nonatomic)A* _test;

    17 -(void)Print;

    18 @end

     1 @implementation A

     2 @synthesize _delegate;

     3

     4 -(void)Start{

     5     if (!_delegate) {

     6         return;

     7     }

     8     [_delegate Print];

     9 }

    10

    11 @end

    12

    13

    14 @implementation B

    15 @synthesize _test;

    16

    17 -(id)init{

    18     if (self = [super init]) {

    19         _test = [[A alloc] init];

    20         _test._delegate = self;

    21     }

    22     return self;

    23 }

    24

    25 -(void)dealloc{

    26    

    27 }

    28

    29 -(void)Print{

    30     NSLog(@"delegate-protocol_succeed");

    31 }

    32

    33 @end

      注:协议protocol有两个修饰符:@optional和@required。被@optional修饰的方法,在采用该协议的类中可以选择不实现,而采用@required修饰的方法,则必须实现。默认为@required。

  • 相关阅读:
    【BZOJ 3238】 3238: [Ahoi2013]差异(SAM)
    【BZOJ 4180】 4180: 字符串计数 (SAM+二分+矩阵乘法)
    【BZOJ 3676】 3676: [Apio2014]回文串 (SAM+Manacher+倍增)
    【BZOJ 3998】 3998: [TJOI2015]弦论 (SAM )
    【BZOJ 2946】 2946: [Poi2000]公共串 (SAM)
    【BZOJ 1398】 1398: Vijos1382寻找主人 Necklace (最小表示法)
    【BZOJ 4031】 4031: [HEOI2015]小Z的房间 (Matrix-Tree Theorem)
    【BZOJ 3534】 3534: [Sdoi2014]重建 (Matrix-Tree Theorem)
    【BZOJ 3659】 3659: Which Dreamed It (Matrix-Tree&BEST theorem )
    【BZOJ 4596】 4596: [Shoi2016]黑暗前的幻想乡 (容斥原理+矩阵树定理)
  • 原文地址:https://www.cnblogs.com/hopeanCom/p/2765815.html
Copyright © 2020-2023  润新知