iteye_2584 2011-11-22 15:05
浏览 350
已采纳

什么是objective-c语言的代理?

本人初学objective-c语言,知道程序的入口是mian.m文件,但是这个文件中基本不用懂,是通过实现UIApplicationDelegate协议来进行下一步的执行,哪位大神能详细的给小弟介绍一下代理这个东西啊,至少能让小弟知道程序除了main.m去哪找下一个入口文件?

  • 写回答

2条回答 默认 最新

  • Java面试专栏 2011-11-22 16:15
    关注

    Objective-C代理方案是本文要介绍的内容。通过一个ViewController控制着AView和BView,这样的一个实例来介绍内容,我们先来看详细内容。

    现在要实现:AView中点击切换到BView,BView中点击又切换回AView中,并把Bview删除或隐藏。

    由于对模式不是很清楚,所以没想到用什么模式处理,如果有什么好的模式可以解决上述问题,希望大侠们指教哇。

    最后使用的方法是objective-c的代理。

    1、在BView.h中定义一个代理:

    id delegate; // A delegate that wants to act on events in this view 
    

    2、定义代理方法,这里使用到的是objective-c 的协议

    @interface NSObject ( BViewDelegate)   
    -(void)delegateMethod;  
    @end 
    

    注:以上写的协议为非正式的,所以,不用被设置代理者,不实现这个代理方法也是可以的。

    3、在点击中实现代码中,调用代理者实现的代理方法。在BView.m中添加如何类似

    代码:

    //设置了代理者,且代理者实现了

    delegateMethod  
    if(delegate && [delegate respondsToSelector:@selector(delegateMethod)])   
    delegate delegateMethod];  
    

    4、在AViem.m中设置BView的代理,并实现delegateMethod方法即可:

    类似初始化中添加:[aView setDelegate:self];

    -(void)delegateMethod{  
          //control bView code here  
          ...  
    } 
    

    另外,关于正式协议:

    @protocol protocolName  
    @optional -(void)delegateMethodA  
    @required -(void)delegateMethodB  
    // other methods  
    ...  
    @end 
    

    正式协议类似于java的借口或抽象类。@optional 的方法,可实现也可不实现,但@required 的方法必需实现。默认为@required。

    正式协议要求在代理类中声明采纳此代理,如:

    @interface ClassName: NSObject <ProtocolName> 
    //...  
    @end 
    

    另外,在调用特殊代理方法前,需要通过conformsToProtocol函数来判断代理对

    象是否遵守定义的协议,如:

    if([mydelegate conformsToProtocol:@protocol(protocolName)])  
    {   
          [mydelegate delegateMethod];   
    } 
    

    或者使用

    respondsToSelector:@selector 
    

    来判断代理对象是否实现相应的方法。

    http://mobile.51cto.com/iphone-280796.htm

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?