----------CornerFly真诚期待与您交流! ----------
一、block
1、作用:Block封装了一段代码,可以在任何时候执行。
2、Blocks的定义
int (^MySum)(int, int) = ^(int a, int b) {
return a+b;
};
定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现。
3、利用block封装代码
^(形参){
代码段;
};
4、block访问外面变量
*block内部可以访问外面的变量
*默认情况下,block内部不能修改外面的局部变量
*给局部变量加上__block关键字,这个局部变量就可以在block内部修改。
5、利用typedef定义block类型
typedef int(^MyBlock)(int,int);
MyBlock b1;// 使用MyBlock定义block变量
二、protocol
1、协议的编写
@protocol 协议名称
// 方法声明列表
@end
@protocol MyProtocol
@required // 加上@required这个方法必须要实现(如果不实现,编译器报错)
- (void)test;// protocol 只能用来声明方法
@optional // 这个方法不一定要实现
- (void)test2;
@end
2、某个类遵守协议
@interface 类名 : 父类 <协议名称>
@end
3、基协议
*NSObject是一个基类,有一个协议,名字也叫NSObject,它是一个基协议。
*建议每个新的协议都要遵守NSObject协议
三、代理设计模式
1、设计原理
有些麻烦的事情不想自己亲自做,就可以找个人帮忙做,即交给代理对象去做
2、设计原则
*首先得拥有某个代理对象属性
*其次要很清楚代理有哪些方法
*最后要保证能解耦
3、一个人没空,找人帮忙买电影票
#import <Foundation/Foundation.h>
@protocol TicketDelegate
// 返回票价
- (double)ticketPrice;
// 还剩多少张票
- (int)leftTicketNumber;
@end
#import <Foundation/Foundation.h>
#import "TicketDelegate.h"
@interface NextAgent : NSObject
@end
#import <Foundation/Foundation.h>
#import "NextAgent.h"
@implementation NextAgent
// 剩余票数
- (int)leftTicketNumber
{
// 代理亲自跑电影院\或者打电话
return 10;
}
// 每一张票多少钱
- (double)ticketPrice
{
// 代理亲自跑电影院\或者打电话
return 500;
}
@end
#import <Foundation/Foundation.h>
#import "TicketDelegate.h"
// 负责询问电影票情况的代理
@interface Agent : NSObject
@end
#import <Foundation/Foundation.h>
#import "Agent.h"
@implementation Agent
// 剩余票数
- (int)leftTicketNumber
{
// 代理亲自跑电影院\或者打电话
return 1;
}
// 每一张票多少钱
- (double)ticketPrice
{
// 代理亲自跑电影院\或者打电话
return 1000;
}
@end
#import <Foundation/Foundation.h>
#import "TicketDelegate.h"
@interface Person : NSObject
- (void)buyTicket;
// 拥有一个代理属性
// 代理的类名随便,必须遵守TicketDelegate协议
@property (nonatomic, retain) id delegate;
@end
#import <Foundation/Foundation.h>
#import "Person.h"
@implementation Person
// 买电影票
- (void)buyTicket
{
// 叫代理去帮自己买票(询问一下票价,询问一下票的剩余张数)
double price = [_delegate ticketPrice];
int number = [_delegate leftTicketNumber];
NSLog(@"通过代理的帮忙,票价=%d,还剩%d张票", price, number);
}
- (void)dealloc
{
[_delegate release];
[super dealloc];
}
@end
import <Foundation/Foundation.h>
#import "Person.h"
#import "Agent.h"
#import "NetAgent.h"
int main ()
{
autoreleasepool{
Person *p = [[[Pereson alloc] init] autorelease];
NextAgent *a = [[[NextAgent alloc] init] autorelease];
p.delegate = a;
[p buyTicket];
}
return 0;
}
void test()
{
// 人
Person *p = [[Pereson alloc] init];
// 代理
Agent *a = [[Agent alloc] init];
// 设置人的代理
p.delegate = a;
// 人打算去看电影
[p buyTicket];
[a release];
[p release];
}
版权声明:本文为wushashawin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。