OC之代理协议的新概念

网摘)

OBJC 中的 protocol 相当于 java 里的接口,delagate 就是接口的实现类(C中的回调类似 );

数据源就是对象遵循了存储数据的协议,可以存储使用数据

协议表示了方法可以被任何类所实现。协议本身不是类。他们只是简单定义了一个其他对象可以实现的接口。当你的类实现了协议中的某个方法的时候也就是说你的类实现了那个协议。

Objective-C的另一个扩展称为协议,它非常象Java中的接口。两者都是通过一个简单的方法声明列表发布一个接口,任何类都可以选择实现。协议中的方法通过其它类实例发送的消息来进行调用。

iPhone程序开发里,object-c里的delegate怎么理解?
答:设置代理
然后就可以实现协议了。
相当于C++里实现一个接口,或Java里实现一个抽象类里的抽象方法。
有些类里不仅可以设置代理,还可以为其设置数据源(比如一些模态窗口UIActionSheet之类的)。

有很多时候是需要在B类口中来完成一些对A类的操作, 这时就需要A设个代理让B来完成了,这个在应用中很常见也很实用。

来源地址http://www.cocoachina.com/bbs/read.php?tid-26591.html

iphone开发重要基础知识------委托代理(degegate)
委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中,
首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。委托机制在很多语言中都用到的,这只是个通用的思想,网上会有很多关于这方面的介绍。
 
那么在苹果开发过程中,用到委托的程序实现思想如下,我主要拿如何在视图之间传输信息做个例子。譬如:在两个页面(UIIview视
图对象)实现传值,用委托(delegate)可以很好做到。
方法:
@interface
A:UIView
id
transparendValueDelegate;
@property(nomatic, retain) id
transparendValueDelegate;
@end
@implemtion
A
@synthesize
transparendValueDelegate

-(void)Function

NSString*
value = @"hello";
[transparendValueDelegate transparendValue:
value];
}
@end

类B
@interface
B:UIView
NSString*
value;
@end
@implemtion
B
-(void)transparendValue:(NSString*)fromValue
{
value
= fromValue;
NSLog(@"the value is %@
",value); 
}
@end

//
下面的设置A代理委托对象为B
//在定义A和B类对象处:
A* a = [[A alloc]
init];
B* b = [[B alloc] init];
a.
transparendValueDelegate = b;//设置A代理委托对象为B
这样
在视图A和B之间可以通过委托来传值了。

下面这个例子委托有两类:
1、一个视图类对象的代理对象为父视图,子视图用代理实
现让父视图显示别的子视图
2、同一父视图下的一个子视图为另一个子视图的代理对象,让另一个子视图改变自身背景色为给定的颜色

代理,解决了C++中,动不动就要继承等等,实现个协议就ok了。
比如mfc中,每一个程序都要继承自CWinApp无非就是要重写那几个虚函数,不觉得麻烦嘛?
所以啊,在cocoa里面,就实现个UIApplicationDelegate代理,不用继承。只需要关心
你要捕获的应用程序生命周期中的事件(函数)就可。

代理就是一个引用指针,比方类a中有一个类b得指针,则b就是a得代理,a得代理就是b,那么a干完一件事情得时候告诉b,让b调用对应得方法来做响应。。这就是代理

协议(Protocol)的用法和代码例子

协议,是通过网络,计算机使用者进行通讯后,互相进行约定规定的集合。两个类进行通讯,用协议就比较方便。下面是 CocoaChina 版主“angellixf”为新手写的协议入门介绍以及代码例子,希望对刚入门开发者有所帮助
一、说明
 
1.协议声明了可以被任何类实现的方法
  2.协议不是类,它是定义了一个其他对象可以实现的接口
 
3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。
 
4.协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。
 
5:委托,就是调用自己定义方法,别的类来实现。
  6.新特性说明
   
@optional预编译指令:表示可以选择实现的方法
   
@required预编译指令:表示必须强制实现的方法

二、定义

.h
@protocol
ContactCtrlDelegate
-(void)DismissContactsCtrl;
@end

@interface
ContactsCtrl : UIViewController {
    id
<ContactCtrlDelegate> delegate;
}
@property (nonatomic, assign) id
<ContactCtrlDelegate> delegate;

.m
@synthesize
delegate;

三、例子

例如:UITextView
@protocol
UITextViewDelegate <NSObject>

@optional

-
(BOOL)textViewShouldBeginEditing:(UITextView *)textView;
-
(BOOL)textViewShouldEndEditing:(UITextView *)textView;

-
(void)textViewDidBeginEditing:(UITextView *)textView;
-
(void)textViewDidEndEditing:(UITextView *)textView;

-
(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text;
-
(void)textViewDidChange:(UITextView *)textView;

-
(void)textViewDidChangeSelection:(UITextView
*)textView;

@end

 
如果要调用以上这些方法,就必须设置UITextView的委托:TextView.delegate =
self;

四、Demo

1、ContactsCtrl.h

#import
<UIKit/UIKit.h>

//定义协议
@protocol
ContactCtrlDelegate
-(void)DismissContactsCtrl;
@end

@interface
ContactsCtrl : UIViewController {
    IBOutlet
UINavigationBar *ContactNavBar;
    id
<ContactCtrlDelegate> delegate;
}
@property (nonatomic,
assign) id <ContactCtrlDelegate>
delegate;

-(IBAction)canCelBtn:(id)sender;
@end

2、ContactsCtrl.m

@implementation
ContactsCtrl
@synthesize delegate;

// Implement
viewDidLoad to do additional setup after loading the view, typically from a
nib.
- (void)viewDidLoad {
    [super
viewDidLoad];
    ContactNavBar.topItem.prompt =
@"选取联系人发送短信";
}

//调用协议中的方法
-(IBAction)canCelBtn:(id)sender{
    [delegate
DismissContactsCtrl];
}

3、ProtocolDemoCtrl.h

#import
<UIKit/UIKit.h>
#import "ContactsCtrl.h"
@interface
ProtocolDemoCtrl : UIViewController
<ContactCtrlDelegate>{//添加委托
    ContactsCtrl
*contactsView;
}

4、ProtocolDemoCtrl.m

#import
"ProtocolDemoCtrl.h"
#define BARBUTTONADD(SELECTOR) [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self
action:SELECTOR] autorelease];

@implementation
ProtocolDemoCtrl
@synthesize contactsView;

// Implement viewDidLoad to
do additional setup after loading the view, typically from a nib.
-
(void)viewDidLoad {
    [super
viewDidLoad];
    self.navigationItem.rightBarButtonItem
= BARBUTTONADD(@selector(addContactAction:));
}

-
(void)addContactAction:(id)sender{
    ContactsCtrl
*contactView = [[ContactsCtrl alloc] initWithNibName:@"ContactsCtrl"
bundle:nil];
    self.contactsView =
contactView;
    contactsView.delegate =
self;//设置委托
    [self
presentModalViewController:contactsView
animated:YES];
    [contactView
release];    
}

//实现ContactCtrlDelegate协议中的方法
-(void)DismissContactsCtrl{
    [contactsView
dismissModalViewControllerAnimated:YES];
}

具体看下Demo的实现哈,还有有时间可以看看Objective-c基础教程2.0这本书。(新手注意)

采用某个协议 相当于给阅读类声明的编程人员发送一条消息,表明我们啊可以用他完成两件事情,啥呢
1、对自身编码和解码
2、能够复制自身

如果你没定义
那你第四步的func就是自己的方法 而不是协议中的了

而且协议又没说你必须实现方法了 你也知道协议分为正式协议和非正式协议,正式的采用实现方法

OC之代理协议的新概念,布布扣,bubuko.com

时间: 2024-10-24 22:06:24

OC之代理协议的新概念的相关文章

新概念第二册(1)--英语口语听力课1

新概念2属于高中难度,最适合初学者打好基础. $课文1 私人谈话 1. Last week I went to the theatre. 上星期我去看戏. 2. I had a very good seat. 我的座位很好, 3. The play was very interesting. 戏很有意思, 4. I did not enjoy it. 但我却无法欣赏. 5. A young man and a young woman were sitting behind me. They we

新概念英语相关资料

新概念英语1-4册 学生用书&教师用书PDF+TXT文本 链接:http://pan.baidu.com/s/1gfaIPfd 密码: usuu 新概念英语1-4册 有声电子书MP3 链接:http://pan.baidu.com/s/1eSP5L9g密码:s56i 有热心的站友分享了新概念英语1-4册的MP3&讲解视频 链接:http://pan.baidu.com/s/1hsrBO6g

关于scala搞出的新概念的语法糖

对于scala搞那么多语法糖和新概念真是又爱又恨.爱的是scala引入了java一直没有的lambda特性,这对于使用高阶函数抽象来处理集合数据非常有爱(spark简洁的RDD处理得益于此).恨的是scala搞那么多的新概念和语法糖. 下面就来说说这些个语法糖和新概念: 一.单例对象(singleton object)scala没有static关键字,搞出了个object关键字来新建单例对象.在单例对象中的成员都是static的.所以要写util类一般都要用这个东西. object xxUtil

新概念英语(1-41)Penny&#39;s bag

新概念英语(1-41)Penny's bag Who is the tin of tobacco for? A:Is that bag heavy, Penny? B:Not very. A:Here! B:Put it on this chair. A:What's in it? B:A piece of cheese.(一块奶酪) A loaf of bread.(一條麵包; 一块未切好的面包; 一只面包) A bar of soap.(一块肥皂) A bar of chocolate. A

新概念英语(1-39)Don&#39;t drop it!

新概念英语(1-39)Don't drop it! Where does Sam put the vase in the end ? A:What are you going to do with that vase, Penny ? B:I am going to put it on this table, Sam. A:Don't do that. Give it to me. B:What are you going to do with it? A:I am going to put i

【秒转】一句大白话,秒懂IT科技新概念!

任何复杂的东西,都有个简单的道理.一句话说不清的概念,不是好概念:让人听不懂的描述,不是好描述.理解概念的本质,把握概念间的关系,比精确刻画概念更重要. 今天给大家带来更直观的科技新概念简单版解读.让更多人了解我们生活中接触的技术术语. Wi-Fi:通过高频无线电信号来传送数据的技术,特点是速度快.距离短. 4G:第四代移动通信技术,分为TDD-LTE和FDD-LTE两种制式. LTE:长期演进技术,即从长远考虑,使通信网络IP化,与互联网接轨. TDD-LTE:TDD (Time Divisi

新概念英语(1-45)The boss&#39;s letter

新概念英语(1-45)The boss's letter Why can't Pamela type the letter? A:Can you come here a minute, please, Bob? B:Yes, sir? A:Where's Pamela? B:She is next door. She is in her office,sir. A:Can she type this letter for me? Ask her please. B:Yes, sir. A:Can

OC中多线程的一些概念

1.进程1.1>进程是指在系统中正在运行的一个应用程序(同时打开QQ和Xcode,系统会分别启动2个进程)1.2>每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内 2.线程1.1>一个进程想要执行任务,必须得有线程(每个进程至少要有一条线程,即主线程)1.2>线程是进程的基本执行单元,进程的所有任务都在线程中执行3.多线程3.1>一个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务      进程→车间, 线程→车间工人3.2>多线程技术

别居一格新概念家居生活馆法式情怀

"你呀你,做事之前不用先想清楚,要是有危险的时候你也这样的话,那该怎么办?"某樱 "熏,你慢点吃,没人跟你抢."某樱 "荣幸至极."某菡 "是我们来了"某菡 "这位小姐,能否和你一起跳舞?"某哲像个绅士一样,邀请着他面前的这位如天仙一般的美人,虽说他没有见过她,不过,她给他的感觉却意外的好. "是,是,董事长好."某服务员 "哎哟,可什么是啊,没可是啦,据上海华茁实业发展有限公