iOS复习笔记11:协构和代理

iOS复习笔记11:协商谈代理

一 功能
能够在商榷中宣示方法(无法声称变量),
某些类只要遵从那几个体协会议,就一定于全体协议中具有的法门表明。
父类准守协议,子类也保有协议中的方法。
切磋也得以准守另贰个研讨。
基协议NSObject(同一时候也是基类),NSObject基类也准守中国基督教协会议。
中国基督教协会议中包括了常用的内部存款和储蓄器管理办法:release,retain方法等。

二 定义
1 协议定义
@protocal 协议名
// 申明方法
@end

2 遵守协议
2.1 类
@interface 类名 : 父类名
@end

2.2 协议
@protocal 协议名
@end

3 关键字
@required 要请完毕,不兑现成警示
@optional 可选实现

4 定义一个供给准守某些体协会议的变量
NSObject obj1;
id obj2;
@property (nonatomic, strong) id p;

三 代码示例

// MyProtocal.h
@protocal MyProtocal 


- (void)protocolDefaultFun();


@required // 默认值,要求实现,不实现会报警告
- (void)protocolRequiredFun();


@optional // 可选实现
- (void)protocolOptionalFun();


@end



// MulProtocal.h
@protocal MulProtocal 


- (void)mulProtocolDefaultFun();


@end



// Person.h
#import 


@protocal MyProtocal;
@protocal MulProtocal;
// 或者 @protocal MyProtocal, MulProtocal;


// 只要一个类准遵守了一个协议,就拥有协议中声明的所有方法
@interface Person : Object 


@end




// Person.m
#import "Person.h"
#import "MyProtocal.h"
#import "MulProtocal.h"


@implementation Person 


- (void)protocolDefaultFun()
{

}


- (void)protocolRequiredFun()
{

}


- (void)protocolOptionalFun()
{

}


- (void)mulProtocolDefaultFun()
{


}


@end




// main.m
#import 
#import "MyProtocal.h"
#import "Person.h"


int main()
{
 // 声明一个遵守了MyProtocal的对象
 NSObject* obj1 = [[Person alloc] init];
 obj1 = nil;
 id obj2 = [[Person alloc] init];
 obj2 = nil;


 // 


 return 0;
}

四 代理

// ticketDelegate.h


@protocol ticketDelegate 


- (int) leftTicketsNumber;


@end



// Agent.h


@protocol ticketDelegate;


@interface Agent : NSObject 


@end


// Agent.m
#import "Agent.h"
#import "ticketDelegate.h"


@implementation Agent


- (int) leftTicketsNumber
{
 return 1;
}


@end



// Person.h


@class Agent;
@class ticketDelegate;


@interface Person : NSObject


- (void)buyTicket;


// 代理属性
@property (nonatomic, retain) id  delegate;


@end



// Person.m
#import "Person.h"
#import "Agent.h"


@implementation Person


- (void)buyTicket
{
 if ( _delegate & [_delegate leftTicketsNumber] > 0)
 {
  NSLog(@"buy ticket");
 }
}


@end



// main.m
#import "Person.h"
#import "Agent"


int main()
{
 @autopool{
  Person* p = [[Person alloc]init];
  Agent* a = [[Agent alloc] init];
  p.delegate = a;
  [p buyTicket];
 }
 return 0;
}

协议名>协议名>协议名>协议名1>协议名1>

http://www.bkjia.com/IOSjc/953304.htmlwww.bkjia.comtruehttp://www.bkjia.com/IOSjc/953304.htmlTechArticleiOS复习笔记11:协议和代理 一 效率能够在商讨中扬言方法(无法宣称变量),
有个别类只要遵循那个体协会议,就也便是具备协议中颇具的方法表明…

iOS 代理协议,ios代理协议

代办,又称委托代理(delegate),是iOS中常用的规划一种格局。看名就会猜到其意义,它是把某部对象要做的事国家体育运动委员会托给其他对象去做。那么别的对象正是那些指标的代办,代替他来打理要做的事。反映到程序中,
首先要简可瑞康(Karicare)(Nutrilon)个目的的委托方是哪些指标,委托所做的内容是如何。在iOS程序设计中,委托通过一种@protocol的方法实现,所以又称之为协议。在iOS的SDK里面,UITableView、UITextField等都有用到这种设计情势。

情商,是多个类共享的一个措施列表,在探讨中所列出的秘技未有响应的落到实处,由另外类来贯彻。委托是指给一个指标提供机缘对另一对象中的变化做出反应照旧相应另三个对象的一言一行。其宗旨思索是贰头化解难题。

 

从点子的概念大家轻便看出委托格局能够起到两上面包车型地铁功能:

第一:代理帮助对象主体做到某项操作,将供给定制化的操作通过代理来自定义完结,达到和子类化对象主体平等的机能。
其次:事件监听,代理对象监听目的主体的有个别关键事件,对事件做出具体响应或播报事件交给必要作出响应的对象。

村办精通接纳委托方式的利润在于:
1、防止子类化带来的过多的子类以及子类与父类的耦合
2、通过信托传递音讯机制落到实处分层解耦

 

图片 1

 

在先后中:一般景况下

1.寄托须求做的行事有:

     1.1定义协议与办法

     1.2声称委托变量

     1.3装置代理

     1.4因而信托变量调用委托方法

2.代理必要做的劳作有:

     2.1依照协议

     2.2落实委托方法

 

举例说,学生想要买一本职业书,书店未有这本书,本人又不直接去出版社,于是,学生就委托书店,支持买书,书店正是学生的代办。

学生 Student.h里面:

#import <Foundation/Foundation.h>

//定义协议与方法
@protocol StudentBuyBookDelegate<NSObject>
-(void)buyBook:(NSString *)name price:(int)p;
@end

@interface Student : NSObject
//声明委托变量
@property(nonatomic,retain)id<StudentBuyBookDelegate> stu_delegate;

-(void)wantBuy;

@end

学生 Student.m里面:

#import "Student.h"

@implementation Student

-(void)wantBuy {

    NSLog(@"学生:我想买IOS开发的书");
    //通过委托变量调用委托方法
    [self.stu_delegate buyBook:@"IOS开发" price:50];
}

@end

 

书店BookShop.h

#import <Foundation/Foundation.h>
#import "Student.h"
//书店遵守StudentBuyBookDelegate的委托协议
@interface BookShop : NSObject<StudentBuyBookDelegate>

@end

 

书店 BookShop.m

#import "BookShop.h"

@implementation BookShop

//书店实现协议的方法
-(void)buyBook:(NSString *)name price:(int)p {

    NSLog(@"我可以以%i元的价格把%@卖个你",p,name);
}

@end

 

在ViewController.m里面

    Student *student =[[Student alloc]init];
    BookShop *bookshop = [[BookShop alloc]init];

    //学生设置代理,委托书店买书
    student.stu_delegate=bookshop;

    //判断书店是否实现了协议,避免未实现带来的崩溃
    if ([bookshop respondsToSelector:@selector(buyBook:price:)])
    {
        [student wantBuy];
    }

 

结果如图:

图片 2

 

小结:协议是一个主意具名的列表,在里头能够定义若干个法子。依照配置,遵从该协议的类会去落成这么些体协会议中鲜明的几何个章程。代理是贰个定义,很难用三个名词去定义(如我们能够说协议其实便是三个方法列表)。它更像是一种关系,作者要做某二个业务,但自己自个儿不想去做那事,小编委托其余人帮小编去做那事。今年,这位其余人正是作者的代办。

正文侧重于概念的明亮,通过学生书店购书的例子,解释了代办协议的概念。下文将尊重于代理协议在iOS
程序设计的选拔,举例分界面反向传值等等。 

http://www.bkjia.com/IOSjc/1077499.htmlwww.bkjia.comtruehttp://www.bkjia.com/IOSjc/1077499.htmlTechArticleiOS 代理协议,ios代理协议
代理,又称委托代理(delegate),是iOS中常用的宏图一种形式。从名称想到所富含的意义,它是把某部对象要做的工作委托给其他…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图