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

问题描述

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

解决方案

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
解决方案二:
http://www.devdiv.com/home.php?mod=space&uid=66789&do=blog&id=3107

时间: 2024-09-10 07:20:14

什么是objective-c语言的代理?的相关文章

Objective—C语言的新魅力——Nullability、泛型集合与类型延拓

Objective-C语言的新魅力 一.引言         在Xcode7中,iOS9的SDK已经全面兼容了Objective-C的一些新特性和新功能.这些功能都只作用于编译期,对程序的运行并没有影响,因此,它可以很好的向下进行兼容,无缝的衔接低版本的iOS系统,那么这些特性有什么样的用处呢,作为开发者,我保证你一定会爱上他们,如果你可以将这些新特性都应用于你的开发,你的开发效率和代码质量,相比之前,会有一个很大的提升. 二.Nullability检测的支持         在swift语言中

《嵌入式 Linux C 语言应用程序设计(修订版)》——2.3 嵌入式Linux编译器GCC的使用

2.3 嵌入式Linux编译器GCC的使用 2.3.1 GCC概述 作为自由软件的旗舰项目,Richard Stallman在十多年前刚开始写作GCC的时候,还只是仅仅把它当作一个C程序语言的编译器,GCC的意思也只是GNU C Compiler而已. 经过了这么多年的发展,GCC已经不仅仅能支持C语言,它现在还支持Ada语言.C++语言.Java语言.Objective C语言.PASCAL语言.COBOL语言,并支持函数式编程和逻辑编程的Mercury语言等.而GCC也不再单只GNU C语言

C/C++编译器GCC下的常用编译命令总结_C 语言

简介GCC的意思是GUN C Compiler.经过了多年的发展,GCC已经不仅仅能支持C语言了,它现在还支持Ada语言.C++语言.Java语言.Objective C语言.Pascal语言.COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等等.而GCC也不再单只是GUN C语言编译器的意思了,而是变成了GUN Complier Collection也即是GUN编译器家族的意思了.另一方面,说到GCC对于操作系统平台以及硬件平台支持,概括起来就一句话:无所不在. 编译示例程序如

Objective-C的内省(Introspection)用法小结_C 语言

内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面的表现尤其的优秀.内省是对象揭示自己作为一个运行时对象的详细信息的一种能力.这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息等等.NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别. 恰当地使用内省可以使面向对象的程序运行更加高效和强壮.也有助于避免错误地进行消息派发.错误地假设对象相等. 下面的部分举例

《嵌入式 Linux C 语言应用程序设计(修订版)》一2.3 嵌入式Linux编译器GCC的使用

2.3 嵌入式Linux编译器GCC的使用 嵌入式 Linux C 语言应用程序设计(修订版) 2.3.1 GCC概述 作为自由软件的旗舰项目,Richard Stallman在十多年前刚开始写作GCC的时候,还只是仅仅把它当作一个C程序语言的编译器,GCC的意思也只是GNU C Compiler而已. 经过了这么多年的发展,GCC已经不仅仅能支持C语言,它现在还支持Ada语言.C++语言.Java语言.Objective C语言.PASCAL语言.COBOL语言,并支持函数式编程和逻辑编程的M

深入理解Swift语言中的闭包机制_Swift

在 Swift 中的闭包类似于结构块,并可以在任何地方调用,它就像 C 和 Objective C 语言内置的函数. 函数内部定义的常数和变量引用可被捕获并存储在闭包.函数被视为封闭的特殊情况,它有 3 种形式. 在 Swift 语言闭合表达式,如下优化,重量轻语法风格,其中包括: 推导参数并从上下文菜单返回值的类型 从单封表达的隐性返回 简略参数名称 尾部闭包语法 语法 下面是一个通用的语法定义用于闭包,它接受参数并返回数据的类型: 复制代码 代码如下:   {(parameters) ->

Swift语言中的函数学习教程_Swift

函数是一个组织在一起语句集合,以执行特定任务.Swift 函数类似于简单 C 函数以及复杂的 Objective C 语言函数. 它使我们能够通过函数调用内部的局部和全局参数值. 像其他任何语言一样 swift 函数也遵循相同的步骤. 函数声明:它告诉编译器有关的函数的名称,返回类型和参数. 函数定义:它提供函数的实际主体. Swift 函数包含参数类型和返回类型. 函数定义在Swift 语言中函数是由 "func" 关键字来定义.当一个新定义函数时,它可能需要一个或几个值作为函数输入

GCC性能优越的多平台编译器详解

不经意间,GCC已发展到了4.3的版本,尽管在软件http://www.aliyun.com/zixun/aggregation/36661.html">开发社区之外乏人闻问,但因为GCC在几乎所有开源软件和自由软件中都会用到,因此它的编译性能的涨落会直接影响到Linux .Firefox 乃至于OpenOffice.org和Apache等几千个项目的开发.因此,把GCC摆在开源软件的核心地位是一点也不为过.另一方面,GCC4.3的出现,正在牵引着广大程序员们的心.如果我们非要用一个词来说

Mac OS X应用程序格式详解

  OS X 应用程序 格式讲解 OS X 如何执行应用程序 译者:51test2003 译自http://0xfe.blogspot.com/2006/03 ... s-applications.html 作为长期的 UNIX 用户, 我通常有一些排除系统故障的工具. 最近, 我正在开发软件并新增了Apple's OS X 系统支持; 但是和其他传统UNIX 变种不同, OS X 不支持许多与加载,链接和执行程序相关的工具. 例如, 当共享库重定位出错时, 我所做的首要事情就是对可执行文件运行