理解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.