1. 程式人生 > >理解object-c委託和協議

理解object-c委託和協議

以下是複製別人的,看著不粗

今天看到一個哥們總結 delegate 和 protocol關係用了這樣的一個比喻,覺得很貼切,拿來給大家分享一下:

      把自己不想幹的一些事情(洗衣做飯)找個助手來幫助你做,而你要的這個助手得有一定的能力,不是任何一個人都可以的,所以你就得有個招聘要求。好了,協議(protocol)就類似於你的招聘要求,你找到的助手就是代理(delegate)。  這樣就有了  我.delegate = 助手;好了,這樣以後再有洗衣做飯的活直接找助手做就可以了。

    協議不是類,以@protocol關鍵字宣告, 協議有兩個物件:代理者和委託者。

    代理者:實現協議的某個方法。

    委託者:用自己的方法制定要實現協議的方法的物件。

    協議的兩個預編譯指令@optional(/ ˈɔpʃənl /):可以選擇的方法。@required:必須執行的方法。

寫個小例子:

協議:HelloworldDelegte.h

    @protocol HelloworldDelegate <NSObject>

    -(NSString *)getString;

    @end

委託類:

 ViewController.h

  #import "HelloworldDelegte.h"

  @interface ViewController:UIViewController

    @property(nonatimic)id<HelloWorldDelegate>delegate;

  @end 

ViewController.m 

  -(void)viewDidLoad{

      SecondViewController *second = [[SecondViewController alloc]init];

      self.delegate = second;//指定代理物件second

      NSString *str = [self.delegate getString];//獲得代理方法的返回值。

  }

代理類:

  SecondViewController.h

  #import "SetStringDelegate.h"

  @interface SecondViewController:UITableBarController< SetStringDelegate >

  @end

  SecondViewController.h 

  -(NSString *)setString{

      return @"helloWorld";

  }

簡單的代理回撥也可以把代理物件設定為自身,可以在自身中實現協議方法。

@protocol HelloWorldDelegte <NSObject>

   -(NSString *)setString;

@end

@protocol HelloWorldDelegate

@property(nonatomic,assign)id<HelloWorldDelegate>delegate;

-(NSString *)setString;

@end

@end

相關推薦

理解object-c委託協議

以下是複製別人的,看著不粗 今天看到一個哥們總結 delegate 和 protocol關係用了這樣的一個比喻,覺得很貼切,拿來給大家分享一下:       把自己不想幹的一些事情(洗衣做飯)找個助手來幫助你做,而你要的這個助手得有一定的能力,不是任何一個人都可以的,

詳解Objective-C委託協議

Objective-C委託和協議本沒有任何關係,協議如前所述,就是起到C++中純虛類的作用,對於“委託”則和協議沒有關係,只是我們經常利用協議還實現委託的機制,其實不用協議也完全可以實現委託。 AD:51CTO 網+ 第十二期沙龍:大話資料之美_如何用資料驅動使用者體驗

詳解C#委託事件(二)

  一、當我們使用關鍵字delegate宣告一個自定義委託型別時,實際上是聲明瞭一個該名稱的類型別,繼承自抽象類System.MulticastDelegate,還包含例項方法Invoke、BeginInvoke、EndInvoke:   public delegate void MyDelegate

C# 委託事件的區別

主要區別:1.事件在類外繫結事件只能用“+=”(“-=”解綁),不能使用‘=’繫結;如果在類內部繫結事件可以用‘=’;        2.委託在類內類外都可以用"+="、"-="、"=";      3.事件的呼叫(執行)只能在類內呼叫;委託(公有)在類內類外都可以呼叫   例子: cl

C#委託事件(WPF實現關閉子視窗B時觸發A視窗事件)

     遇到一個問題,子視窗關閉時,主視窗如何知道子視窗關閉了,並執行相應的處理事件。為了解決這個問題查閱資料後可以用委託和事件來完成。 一、委託 1、委託:        委託是安全封裝方法的型別,類似於 C 和

C#委託lambda

委託參考連結: https://www.cnblogs.com/wudiwushen/archive/2010/04/20/1703368.html https://www.cnblogs.com/yinqixin/p/5056307.html "Lambda表示式"是一個匿名函式,是一

C#】C#委託字典的結合使用

using System.Collections; using System.Collections.Generic; using UnityEngine; public class DelegateDic : MonoBehaviour { public de

詳解C#委託事件(一)

  委託(Delegate)是安全封裝方法的型別,類似於C和C++中的函式指標,與函式指標不同的是,委託是面向物件的、型別安全的和可靠的;   一、委託型別是CTS中五種基礎型別之一,是一種引用型別,表示對具有指定引數列表和返回型別的方法的引用,也是一種特殊的類型別,其型別為System.Multicast

c#委託lambda表示式(二)

Lambda表示式 Lambda表示式是一種可用於建立委託或表示式目錄樹型別的匿名函式。通過使用Lambda表示式,可以寫入可作為引數傳遞或作為函式呼叫值返回的本地函式。 若要建立Lambda表示式,需要在Lambda運算子=>左側輸入引數(如果有),

自己理解C++委託建構函式

就是將無參,少數引數的委託給多引數的去構造。 譬如下面的鐘表例子 首先沒有用委託構造的寫法 class Clock { public : Clock();//無參 Clock(int h,int m,int s);//帶三個引數的 priv

c#委託lambda表示式(一)

如何使用委託 委託是安全封裝方法的型別,類似於c和c++中的函式指標。與c函式指標不同的是,委託是面向物件的、型別安全的和可靠的。委託型別是由委託的名稱確定。以下是宣告名為Del的委託,該委託可以封裝採用字串作為引數並返回void的方法: public

C#委託字典的結合使用

目錄   例1: 例2: 例1: class Program { static void Main(string[] args) { Dictionary<char, Func<

Object-C中的協議Protocol

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

c# 委託事件

剛剛我看了以上各位的留言回覆,我說一下自己的看法,可能和裝配腦袋的看法有些出入: 首先,event和委託的區別不在於是誰封裝了誰,而是它們兩者之間就根本沒有可比性。 event是一個修飾符,delegate是一個類。就好像static修飾符和String型別,它們有什麼可比性? 宣告一個事件

C# 委託事件的聯絡區別

聯絡:事件是一種特殊的委託,均類似於C中的函式指標,將一個方法通過引數傳到別的方法中,通過別的方法來呼叫。 區別:體現在封裝性。事件是訂閱釋出的機制。 委託可以在類的外部直接賦值,直接呼叫。即可以使用: A a = new A();   B b = new B()

C#委託dynamic型別配合使用的小例子

using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.Remoting.Messaging; using System.Text; nam

C#委託事件的簡單例項

# 委託 C#裡這個委託我的理解是可以看成是一個**方法模板的型別**。(不過並沒有找到相關的理解 比如有幾個返回值,引數列表型別相同的方法,就能用同個模板型別來表示,然後例項化一個委託型別就繫結上一個或多個方法,然後就可以一次呼叫這多個方法,相當於把方法物件化?。 ```c# using System; n

關於C#事件委託理解

委託:1、委託宣告是與類同級,但是一個類似抽象方法的宣告2、委託的使用需要例項化,例項化時傳進一個方法3、委託例項化後可以呼叫,相當於呼叫一個方法4、委託可以進行加減操作,方法就會到委託呼叫列表裡去宣告委託:delegate <委託返回值型別> <委託名&g

Objective-C中的協議代理(委託)設計模式

一、協議:          Objective-C中的協議(Protocol)類似於常用的介面,協議(Protocols)中定義的方法,在類中實現。協議(Protocol)通常用來實現委託物件(Delegate Object)。委託物件(Delegate Object)一

c++引用指針的徹底理解

內容操作 nbsp 容易 不必要 別名 影響 sof 的確 設置 ★ 相同點: 1. 都是地址的概念; 指針指向一塊內存,它的內容是所指內存的地址;引用是某塊內存的別名。 ★ 區別: 1. 指針是一個實體,而引用僅是個別名; 2.