×

Discussion Board

Results 1 to 2 of 2
  1. #1
    Nokia Developer Champion
    Join Date
    Jan 2013
    Posts
    32

    【iOS开发者-》WP开发者】iOS与wp的delegate比较学习

    一般来说在iOS实现delegate步骤如下,在iOS应用程序级别涉及到两个类,一个是UIApplication,另一个是UIApplicationDelegate,我们就以他们为例说明一下delegate机制:
    1. 我们知道UIApplication是用来处理évent的,它可以接收到应用程序状态变化信息,比如正在启动、进入前台、进入后台等等。
    2. 一个应用程序中还会有一个AppDelegate,这个AppDelegate实现了UIApplicationDelegate。
    3.1. UIApplication有一个delegate属性,它是UIApplicationDelegate类型的指针。
    3.2. UIApplicationMain函数会对UIApplication的delegate属性赋值,指向AppDelegate实例。
    4. 当UIApplication处理event时候就会调用AppDelegate实例的相关方法。
    这就是UIApplication与UIApplicationDelegate两个类之间如何通过delegate协调工作的。

    然后我们来看一下wp中的delegate,在wp中与之对应的是PhoneApplicationService和Application类。
    1. PhoneApplicationService类似UIApplication类,它可以接收应用程序状态变化信息,日股正在启动、进入前台、进入后台等等。
    2. 一个应用程序会有一个App类,它继承自Application类。
    3.1. 打开PhoneApplicationService的定义,你会发现,它定义了几个évent
    [代码]c#/cpp/oc代码:
    Code:
    public event EventHandler<ActivatedEventArgs> Activated;
           //
           // 摘要:
           //     当应用程序退出时发生。
           public event EventHandler<ClosingEventArgs> Closing;
           //
           // 摘要:
           //     当应用程序被取消激活时发生。
           public event EventHandler<DeactivatedEventArgs> Deactivated;
           //
           // 摘要:
           //     当应用程序启动时发生。
           public event EventHandler<LaunchingEventArgs> Launching;
           //
           // 摘要:
           //     应用程序开始在后台运行时发生。
           public event EventHandler<RunningInBackgroundEventArgs> RunningInBackground;
    那这些évent是什么呢,他们实际上是EventHandler的实例,我们看看EventHandler的定义:
    public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
    大家会发现前面有一个delegate关键字。
    3.2. 接着我们打开App.xaml文件,你会发现以下代码:
    [代码]xml代码:
    Code:
    <shell:PhoneApplicationService
               Launching="Application_Launching" Closing="Application_Closing"
               Activated="Application_Activated" Deactivated="Application_Deactivated"/>
    也就是说我们对PhoneApplicationService的四个event进行了赋值,指向App类中的相关方法。
    4. 当PhoneApplicationService发现应用程序状态变化时候,它对调用Activated, Closing, Deactivated, Launching等,直接当函数调用欧(学名叫做触发event)。
    由于3.2的支撑,这些event最终会调用App类中的相关方法。

    所以,iOS与WP在类的设置上、触发机制上有着惊人的相似,我们后期还会讲到其他一系列惊人的相似,到时候你会明白出了肤色不同,大家都是人!

    但是不得不说他们还是有区别的,iOS的delegate实现方式更加传统,一个类实现必要的接口(AppDelegate),另一个类通过接口调用实现通知机制(UIApplication);
    而wp的实现更加灵活,我们不需要单独定义接口,被通知的类也不需要实现这个接口,只需要随便添加个函数就行。

    在iOS中,只有一个delegate,所以的状态变换都通知给了AppDelegate的实例;而wp中你愿意在哪里接收通知都行,也可以不程序的状态变化可以分别在不同的类中处理。

    更有甚者,wp中接收者还可以不止一个,也就是一个事件可以有多个接收者。。。

    It's easy to be a Windows Phone developer if you are an iOS developer!

  2. #2
    Registered User
    Join Date
    Jun 2013
    Posts
    3

    Re: 【iOS开发者-》WP开发者】iOS与wp的delegate比较学习

    V哥。。。。在科普啊

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •