zoukankan      html  css  js  c++  java
  • ObjectiveC protocol & delegate

    应用程序的委托(官方资料)

      监控应用程序的高级行为是应用程序委托对象的责任,而应用程序委托对象是您提供的定制类实例。委托是一种避免对复杂的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。

     

    Demo下载:https://files.cnblogs.com/pure/ProtocolDemo.zip

  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/pure/p/2468889.html
Copyright © 2011-2022 走看看