精华内容
下载资源
问答
  • 深入理解C#中的Delegate

    2020-12-31 00:26:39
    在c#中,event与delegate是两个非常重要的概念。因为在Windows应用程序中,对事件的使用非常频繁,而事件的实现依赖于delegate。 下面是对网上一些比较好的关于delegage的资料的整理,以及自己的一些想法。 Delegate...
  • 本文实例分析了C#匿名方法与Delegate类型转换错误。分享给大家供大家参考。具体分析如下: 问题描述  C#2.0出现了匿名方法, 这在一定程度上节省了我们维护代码上下文的精力, 也不需要思考为某个方法取什么名字比较...
  • model view delegate 不清楚 mvd 结构的 建议先去了解一下 否则看起来比较吃力 项目结构比较简单清晰 一个小demo github 源码地址 main 函数 manwindow 主界面 progressbardelegate 自定义的进度条委托 我们...
  • 删除Scenedelegate的”.h”和”.m”文件 删除Info.plist文件中的Application Scene Manifest配置; 删除AppDelegate.m文件中的两个管理Scenedelegate生命周期代理方法 pragma mark – UISceneSession lifecycle ...
  • 主要给大家介绍了关于RxSwift实现替换delegate的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用RxSwift具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 主要介绍了Delegate IDE build/run actions to maven 配置会影响程序运行吗,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • C# delegate thread范例

    2019-04-13 14:09:22
    C# delegate thread范例 若不懂在代码中,线程如何调用的可以看看
  • 主要介绍了C#使用委托(delegate)实现在两个form之间传递数据的方法,涉及C#委托的使用技巧,需要的朋友可以参考下
  • 但是.Net毕竟是更高级的语言,委托Delegate也更高级了,委托是一种数据接口,它包含调用目标和调用方法的指针;而在.Net中定义的委托都继承自MulticastDelegate即多播委托,所谓的多播委托是指可以包含多个调用方法...
  • delegate 是表示对具有特定参数列表和返回类型的方法的引用的类型。在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。你可以通过委托实例调用方法。 委托用于将方法作为参数传递给其他方法...
  • 改例子是工作中从同事那里得到的参考例子,感觉经典,就留下来了,虽然内容不多,几乎涵盖了所有相关的操作,很好的参考例子,所以要留下来,方便以后使用
  • use delegate :: delegate; #[derive(Clone, Debug)] struct Stack <T> { inner: Vec < T> , } impl <T> Stack <T> { pub fn new () -> Self <T> { Self { inner: vec! [] } } delegate! { to self .inner { ...
  • delegate.zip

    2020-01-07 16:10:45
    文章中演示的代码。
  • 主要介绍了jQuery中delegate()方法用法,实例分析了delegate()方法的功能、定义及为匹配元素的子元素添加一个或多个事件,并规定当这些事件发生时运行函数的使用技巧,需要的朋友可以参考下
  • SceneDelegate 在Xcode11.0以后创建项目,运行项目出现bug时遇到的问题之一,我的解决方法。 报错: -[AppDelegate setWindow:]: unrecognized selector sent to instance 0x60000002b440 修改方法: 在AppDelegate...
  • qml中TreeView自定义数据类型,使在代理(Delegate)中能传递到更多的数据 具体可以访问博客https://www.jianshu.com/p/dc24d010e5e4
  • 主要详解了jquery事件delegate()的使用方法,delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数,感兴趣的小伙伴们可以参考一下
  • 请不要直接下载代码(案例代码超过5M) 完整代码 Github:https://github.com/Jeykit/MUKit 详细介绍: ... 优点: 只需要一个block就可以完成UITableView显示,无需写烦人的delegate和DataSource
  • $(table).delegate(tr,click,function(e){ checkbox=$(this).children().first().children()[0]; alter=$(this).children().eq(8).children().children()[0]; delet=$(this).children().last().children().children...
  • .Net 缓慢的 Delegate.DynamicInvoke 的替代品。 (需要 .Net 3.5 或更新版本) Delegate.DynamicInvoke 使用非常慢的后期绑定。 FastDelegate 生成、编译和缓存几乎与常规方法调用一样快的代码。 它适用于任何...
  • 每一个Item是由一张图片,用ListView实现了自由添加删除项图片,鼠标移到图片上面时,删除图标显示,为图片画边框,当鼠标移到删除图标上面时,删除图片变为高亮显示,点击删除图片,item删除。
  • 主要简单讲诉 QT View/Model 和 delegate 完整工程代码
  • 首先我们要弄清楚什么是委托?相信大家对委托并不陌生,委托其实就是一种定义方法签名的类型;...这里我就不做具体介绍了;  这篇文章我主要是想告诉大家委托的内部到底是什么样的结构,我们先通过一个简单的demo来...
  • jQuery1.7中 .delegate()已被.on()取代,下面以示例的方式为大家介绍下jQuery中delegate与on的用法与区别,感兴趣的朋友可以参考下
  • C# Delegate讲解

    2017-12-15 17:59:07
    C# Delegate讲解C# Delegate讲解C# Delegate讲解C# Delegate讲解
  • 本篇文章只要是对jQuery:delegate中select()不起作用的解决方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
  • protocol 和 delegate

    2019-04-17 01:23:25
    NULL 博文链接:https://luckfox.iteye.com/blog/1826184
  • Delegate

    2015-12-02 16:31:45
    delegate&protocoldelegate(委托/代理)是iOS开发中常用的设计模式,表示将一个对象的部分功能转交给另一个对象。借助protocol可以很方便实现这中设计模式。应用场景: 通知与监听: 详见 delegate,notifucation,KVO...

    delegate&protocol

    delegate(委托/代理)是iOS开发中常用的设计模式,表示将一个对象的部分功能转交给另一个对象。借助protocol可以很方便实现这中设计模式。

    应用场景:

    1. 通知与监听: 详见 delegate,notifucation,KVO三种模式实现通信的优缺点

      苹果系统自带:

    2. UITabelView


      1. oc 一个类只能继承一个父类,但代理可以使一个类继承多个协议。
        这样一个类 可以从多个 类中 拿到方法 实现 扩展

    什么是delegate?下面是官方文档解释

    >
    Delegation is a simple and powerful pattern in whick one object in a program acts on behalf of,or in coordination with,another object.The delegating object keeps a reference to the other
    object-the delegate -and at the appropriate time sends a message to it.The message informs the delegate of an event that the delegating object is about to handle or has just handled. The delegate may respond to the message by updating the appearance or state of itself or other objects in the application, and in some cases it can return a value that affects how an impending event is handled. The main value of delegation is that it allows you to easily customize the behavior of several objects in one central object.

    白话文:

    你需要做一件事情,你自己不想动手,委托给 delegate 处理,为了避免所托非人,delegate 需要遵守一个你和 delegate 都能接受的 protocol。一个类只要声明它遵守了某个你想要的 protocol,你就能把它信认为是你的 delegate。
    生活示例:很多土豪老板都是大忙人,有多个秘书或者助理,老板只想躺着输数钱就好了,接电话、订餐等等这些杂事,统统交给秘书(delegate)去处理就好了,至于接电话或者订餐的具体注意事项,秘书早就跟老板有了约定(protocol)。

    说明:(1)官方解释中 delegation 是个名词,它本身是一个对象,专门代表被委托对象来和程序中其他对象交互。
    (2)虽说官方文档有的时候显得抽象,但是很多时候必须读 Apple 官方文档,因为 Apple 官方文档的解释是最精确的


    Protocol

    凡是支持 delegate 的对象,其背后都有一个相应的协议 protocol(C# 或者 Java 语言中称之为接口 interface),声明可以向该对象的 delegate 对象发送的消息。定义协议,就是创建一个属性和方法清单。如果一个类实现了某个协议中规定的方法,称这个类遵守这个协议。当一个类遵守一个协议时,就是向编译器做出了承诺:它实现了这个协议中列出的所有属性和方法。除此之外,它还可以有其他很多属性或方法,另外,也可以同时遵守多个协议。


    Cocoa Touch 中的delegate

    使用 Xcode 创建一个工程时,Xcode 自动生成的 AppDelegate.h& AppDelegate.m两个文件,就可以看到 delegate 的使用。AppDelegate.h如下所示:

       #import <UIKit/UIKit.h>
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    @property (strong, nonatomic) UIWindow *window;
    @end
    

    AppDelegate.h 中,AppDelegate类声明了遵守 UIApplicationDelegate协议。查看 UIApplicationDelegate协议包含了哪些属性和方法

    @protocol UIApplicationDelegate<NSObject>
    @optional
    - (void)applicationDidFinishLaunching:(UIApplication *)application;- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(6_0);
      ;
      ;
      ;
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
     ;
     ;
     ;
    

    由于UIApplicationDelegate协议中属性和方法太多,只列出部分供展示在UIApplicationDelegate协议中,由关键字@optional可知方法都是可选的。协议所声明的方法可以是必需的(@required)或是可选的(@optional)。默认都是必需的。委托协议中的方法通常都是可选的。

    AppDelegate.m中,实现了应用生命周期的方法(均在协议UIApplicationDelegate定义的可选方法):

    @implementation AppDelegate
    
    #pragma mark - Application lifecycle methods
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES;}
    -(void)applicationWillResignActive:(UIApplication *)application {}
    - (void)applicationDidEnterBackground:(UIApplication *)application {}
     - (void)applicationWillEnterForeground:(UIApplication *)application {}
     - (void)applicationDidBecomeActive:(UIApplication *)application {}
    - (void)applicationWillTerminate:(UIApplication *)application {}
    

    那协议UIApplicationDelegate有什么作用呢?举个例子:大家都有深刻体会,在 iPhone 上使用一个 App 过程中,一个来电或者锁屏会让 App 进入后台甚至被终止,此外还有其它情况也会导致 App 受到干扰,这时会产生一些系统事件,UIApplication会通知它的 delegate对象,让 delegate 来处理这些事件。

    怎么使用 delegate? - 自定义 delegate

    Talk is cheap.Show me the code. ~Linus Torvalds

    * 前三步(委托者 老板):1.声明 delegate 原型;2.声明 delegate 变量; 3.实现delegate 方法 功能(功能的具体实现在这里)*

    后三步(被委托者 秘书一般是控制器):4.声明实现(遵守) delegate;5.设置 delegate 的值(设置监听者self-控制器) 6.调用 delegate 方法 进行实现


    前面举了老板跟秘书的示例,现在我们就简单实现一下这个示例。

    step1 : 声明 delegate原型,即定义一个` protocol

    // BossDelegate.h
    #import <Foundation/Foundation.h>
    @class Boss;
    @protocol BossDelegate <NSObject>
    @optional
    //接电话
    - (void)tel:(Boss *)theBoss;
    //订餐- (void)buyFood:(Boss *)theBoss;
    @end
    

    step2 : 委托者 (老板) 声明一个delegate变量

    // Boss.h
    #import <Foundation/Foundation.h>
    #import "BossDelegate.h"
    @interface Boss : NSObject
    //声明 delegate 变量
    @property (nonatomic, weak) id<BossDelegate> delegate;
    @end
    

    备注:iOS SDK 中几乎所有的委托都是弱引用属性(weak),这是为了避免对象及其delegate之间产生强引用循环。

    step3: 委托者(老板)调用 delegate内的方法:

    注意:

    这其实就是 协议中 方法的功能的具体实现,被委托者(控制器 后3步实现)

    到时 直接实现这个方法就行

    // Boss.m
    #import "Boss.h"
    @implementation Boss
    - (id)init { 
    self = [super init]; 
    if (self) { 
    //
    } 
    return self;
    }
    - (void)callSecretary {
     //调用 delegate 的方法
    [_delegate tel:self]; 
    [_delegate buyFood:self];
    }
    @end
    

    step4: 被委托者(秘书)声明实现(遵守) delegate

    // Secretary.h
    #import <Foundation/Foundation.h>
    #import "BossDelegate.h"
    //声明实现 delegate
    @interface Secretary : NSObject<BossDelegate>
    @end
    

    step5: 设置delegate的值

    // main.m
    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"
    #import "Boss.h"
    #import "Secretary.h"
    int main(int argc, char * argv[]) {
     @autoreleasepool { 
    Boss *boss = [[Boss alloc] init]; 
    Secretary *sec = [[Secretary alloc] init];  
    //设置 delegate 的值
    boss.delegate = sec;  
    [boss callSecretary]; 
    
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    }
    }
    

    step 6 : 被委托者(秘书)(调用)来实现 delegate方法

    // Secretary.m
    #import "Secretary.h"
    @implementation Secretary
    - (id)init { 
    self = [super init]; 
    if (self) { 
    //
    } 
    return self;
    }
    - (void)buyFood:(Boss *)theBoss { 
    NSLog(@"秘书正在帮老板订餐...");
    }
    - (void)tel:(Boss *)theBoss { 
    NSLog(@"秘书正在帮老板接听电话...");
    }
    @end
    

    注意:

    其实一般情况下 后三步都是在 控制器里面实现的。step5.之所以在main.m 实现,因为
    这段代码没有控制器 程序根本不能执行,只能放在 main 的runLoop 里面

    经过上述 6 步,一个完整的 delegate 就实现了。运行程序,结果如下:

    2015-08-19 15:19:30.487 Protocol_Delegate_Demo[2230:174797] 秘书正在帮老板接听电话...
    2015-08-19 15:19:30.489 Protocol_Delegate_Demo[2230:174797] 秘书正在帮老板订餐...
    

    由程序运行结果可见,实际的动作是由委托者的 delegate(老板的秘书)去实现的。上述例子只是一个简单的示例,在 iOS 开发中经常用到 delegate 设计模式。比如:实现常见的UITableView就必须遵守TableViewDataSource, UITableViewDelegate两个协议。原理用法都是相通的,按照delegate使用的前三步、后三步,就可以把delegate这种设计模式应用好。

    而且 UIView 就是通过 继承 遵守 UITableView 的 代理 变成 UITableView

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 279,983
精华内容 111,993
关键字:

delegate