`

關於delegate

    博客分类:
  • ios
阅读更多

 

UIApplication接收事件,UIApplication響應事件(程序生命週期、系統事件)這就意味著通常沒必要對UIApplication進行修改,而只需考慮如何在UIApplicationDelegate中對UIApplication接收到的事件進行處理。處理系統事件需要編寫一個繼承自UIApplicationDelegate接口的類,而UIApplicationDelegate接口提供生命週期函數來處理應用程序以及應用程序的系統事件。應用程序UIApplcation被定義在MainWindow.xib文件中,並且有一個作為outlet的UIApplicationDelegate引用,當應用程序接收到諸如程序生命週期或系統事件時,UIApplication會調用UIApplicationDelegate中實現的相應的方法。

 

這樣做的好處是:

把程序的邏輯處理從UIApplication中分離出來;

避免了程序員直接從UIApplication派生子類,試想如果通 過從UIApplication派生子類的方法來管理應用程序的生命週期是多麼痛苦的一件事。

 

“委託模式”中一般有兩個對象參與處理同一個請求,所謂的請求在iPhone中就是應用程序生命週期和系統事件,接受請求的對象將請求委託給另一個對象來處理,同樣在iPhone中對應的是UIApplication在接收到生命週期和系統事件後委託給UIApplicationDelegate來處理。同樣,委託模式也是很多其它模式的基礎,如狀態模式、策略模式、訪問者模式本質上是在特殊的情況下採用了委託模式。委託模式使得可以用聚合代理繼承(即UIApplication類中包含一個UIApplicationDelegate接口成員)

 

iPhone不採用繼承體系而採用委託模式來實現聚合的原因,其更深層次在於IPhone框架的多樣化使得繼承無法保證子類行為的一致性,而委託模式恰恰是為了彌補繼承的這個缺點誕生的(說白了就是聚合嘛)。

 

在應用程序失去焦點前會調用delegate的applicationWillResignActive()方法,而應用程序再次獲取焦點時會調用applicationDidBecomeActive()方法。比如鎖屏會調用applicationWillResignActive()方法,解鎖調用applicationDidBecomeActive()方法。

而applicationDidReceiveMemoryWarning()方法則是在程序因內存洩露crash之前調用。

 

补充一下,今天跟joe先生讨论了一下,一般event的传递都有自己的chain,event顺着这个chain往上传递,直到有一个对象处理这个事件,这个事件才会停止传播,这个对象ios里叫响应者(responder),十分传神(当然,这是当你理解的时候,开始时我一直以为responder是焦点的持有者,十分nc的想法),而delegate提供给我们一个在对象接收到指定的event后处理该event的接口,究竟要不要处理该event,在于你实不实现这个delegate有关这个event的方法。

 

总的来说,对于delegate的实现方式还是有点confused,viewController里头有view,view里头的delegate又是viewController,十分纠结的模式。

 

再次补充:刚刚又看到一点,其实感觉delegate怪的原因是因为这个模式中两个对象间好像并没有清晰的从属关系,这样放在需要避免循环引用的Objective-C中好像不太合理,不过iphone开发中的delegate是以assign方式注入的属性,而不是其他像retain、copy等方式注入的能使reference count自增一个的属性,这样就避免循环引用的产生。

 

通常在使用对象时不是自己alloc、retain或copy的,就不用去release了。

分享到:
评论

相关推荐

    C#使用委托(delegate)实现在两个form之间传递数据的方法

    关于Delegate【代理、委托】是C#中一个非常重要的概念,向前可以推演到C++的指针,向后可以延续到匿名方法、lambda表达式。 现在我就从一个最简单最实用的一个小例子出发分析一下Delegate的使用。 现在有两个窗体...

    iOS Delegate传值通俗理解

    它允许一个对象(委托者)通知另一个对象(委托对象)关于特定事件的发生。在iOS应用中,Delegate经常用于控制器间的通信,如UIViewController和UITableView之间的数据传递。本文将通过一个简单的Demo,深入浅出地...

    简单的delegate实现

    在iOS开发中,Delegate是一种非常重要的设计模式,它允许对象之间进行通信,特别是当一个对象(委托者)需要通知另一个对象(委托对象)某些事件发生时。本文将深入讲解“简单的Delegate实现”,并以实际代码为例,...

    iPhone编程delegate示例

    在Objective-C中,`delegate`是一种关键的编程模式,用于实现对象间的通信。本文将深入探讨如何在iPhone编程中使用`delegate`,并以一个名为"MyDelegateSample"的示例项目来说明。 首先,`delegate`是Objective-C中...

    iOS学习笔记3---delegate五步曲,轻松学会使用delegate

    在iOS开发中,Delegate是一种非常重要的设计模式,它允许对象之间进行通信,使得一个对象能够对另一个对象的行为进行响应。本篇文章将通过“delegate五步曲”,帮助你深入理解并熟练掌握如何在iOS应用中使用Delegate...

    TestDelegate

    其次,`Delegate.vsd`可能是一个设计图或诊断文件,它可能包含了关于Delegate的类或方法的设计布局,或者是调试过程中的相关记录。这有助于开发者理解代码逻辑,尤其是在处理复杂的Delegate调用链时。 最后,`...

    Delegate 小Demo

    在.NET框架中,Delegate是事件处理和回调机制的关键组成部分,它代表了一组方法的签名,允许我们传递方法作为参数或创建方法的组合。这个“Delegate小Demo”显然是一个用于学习和复习Delegate用法的示例项目。让我们...

    C++中实现委托(delegate)

    网上有很多关于C++ delegate机制的文章,但都讲的是函数指针的内容,上周就C++中实现C#的delegate机制的问题研究了好几天,查看了很多相关资料,才解决了问题,现将我写的C++ delegate测试程序贴出来,希望能帮到有...

    C# Delegate小例子

    在这个"C# Delegate小例子"中,我们将深入探讨Delegate的概念、使用方式以及它在实际编程中的应用。 1. **Delegate概念**: Delegate在C#中是一种类,它代表对方法的引用。这种引用是类型安全的,意味着在编译时就...

    Delegate小Demo

    在.NET框架中,Delegate是类型安全的函数指针,它允许我们引用方法并像操作对象一样操作它们。Delegate是事件处理、回调函数和多播委托等核心编程概念的基础。在这个"Delegate小Demo"中,我们将深入理解Delegate的...

    OC中以delegate形式页面传值

    页面间的通信是应用程序设计的关键部分,而`delegate`模式是OC中实现这种通信的一种常见方法。本篇文章将深入探讨如何在OC中使用`delegate`来实现页面间的传值。 **一、Delegate模式简介** Delegate模式是一种设计...

    Delegate&Block作回调

    本示例主要探讨了两种回调方式:Delegate(代理)和Block(块)。这两种方式各有特点,开发者可以根据实际需求选择合适的实现方式。 首先,我们来详细了解一下Delegate。Delegate是一种协议(Protocol)导向的回调...

    swift-多delegate的使用

    标签"Swift开发-其它杂项"表明这是一个关于Swift编程中非常规或特定场景的应用,而"PPSMutableDelegate-master"可能是指一个开源项目,该项目可能提供了更复杂或定制化的Delegate解决方案,例如支持动态添加和删除...

    delegate一对多

    在iOS和macOS开发中,`delegate`模式是一种常见的设计模式,用于实现对象间的通信。在标题"delegate一对多"中,"一对多"指的是一个委托(delegate)对象可以同时处理多个其他对象的请求或事件。这种模式尤其在UI组件...

    代理delegate_execute.exe

    delegate_execute.exe

    delegate与block的使用

    在iOS和macOS的开发中,Delegate和Block是两种非常重要的设计模式,它们用于实现对象间的通信和回调机制。Delegate通常用于实现一对多的关系,而Block则提供了更加灵活的代码块传递方式。这两种机制在软件设计中都有...

    C# Delegate讲解

    C# Delegate讲解 C# Delegate是.NET Framework中的一种重要机制,它允许开发者在程序中动态地调用方法。Delegate相当于函数指针,它指向程序中另一个以后会被调用的一个或多个方法。委托包含三个重要的信息:所调用...

    (Swift)SceneDelegate中启动UI

    在Swift编程语言中,SceneDelegate是iOS应用开发中的一个重要组件,尤其在iOS 13及更高版本中。SceneDelegate作为应用程序界面(UI)初始化和管理的核心部分,它负责处理应用程序的生命周期事件,如窗口创建、激活和...

    在qt的MVC模式中,运用控件在delegate中显示的方法

    在本主题中,我们将深入探讨如何在Qt的MVC环境中,利用Delegate来显示自定义控件。 **1. MVC模式简介** MVC模式由三个主要组件构成: - **Model**:数据模型,负责存储和管理数据。 - **View**:视图,负责数据的...

    ios设计模式delegate

    ios设计模式delegate 示例 ,导航功能的两个视图控制器(用push方式从一个窗口推到另一个窗口),第二个窗口创建两个按钮,标题分别为红色和绿色,点相应的按钮弹回前一个窗口,同时前一个窗口的背影色变成按钮标题...

Global site tag (gtag.js) - Google Analytics