黑马程序员 -- OC 语言 Block

------- android培训、.Net培训、IOS培训碧空海的技术博客,期待与您交流!----------

第六讲 BLOCK

A.block的使用

1.Block用于封装(保存)一段代码,可以在任何时候执行。

2.Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。

//声明

@interface Person :NSObject

@end

//实现

@implemention Person

@end

//主函数

Int main()

{

//block保存的代码: 书写规范; void (^函数名) () = ^{   }

//block标志:^

//定义block变量

Void (^myblock)() = ^{

NSLog(@”da yin”);

}

//利用block变量调用block内部代码

Myblock();

Return 0;

}

3.有返回值和形参的block函数

//block举例

Int  (^sumblock)(int, int) =  ^(int a, int b) {

Return a + b;

}

 

Void (^lineblock)(int)= ^(int n)

{

For (int I = 0; I < n; i++)

{

NSLog(@”-------------------”);

}

}

//调用的时候

Int c = sumblock(10, 12);


4. 03-block使用typedef定义block类型

//加法运算

Int (^sumBlock)(int, int);

sumBlock = ^(int a, int b) {

return a + b;

}

//减法运算

Int (^minusBlock)(int, int) = ^(int a, intb) {

return a – b;

}

//Block调用

NSLog(@”%d------%d”, MinusBlock(10, 8),sumBlock(12, 15));

//和Block相似的指针函数

Int (*p)(int, int);

Typedef int (*sum)(int, int);


Typedef int (^myBlock)(int, int);


5.使用Block注意点

a.如何定义block的变量

int  (^sumBlock)(int,int); //又返回值,有参数

void (^myBlock)(); //无返回值,无参数

b.如何利用block封装代码

^(int a, int b) { return a – b;  };

^(int a, int b) { return a + b;  };

^() {

NSLog(@”----------”);

};

^ {

NSLog(@”----------”);

};

c.block访问外部变量

*block内部可以访问外面的变量

*默认情况下,block内部不能修改外面的变量

*给局部变量加上_block关键字,这个局部变量可以在block内部修改

d.利用typedef定义block类型

typedef int (^MyBlock)(int, int);

//以后就可以用MyBlock这种类型来定义block变量。

MyBlock sum, min;

MyBlock b3 = ^(int a, int b) { return a –b;  };

B.protocol使用

1.可以用来声明一大堆方法(不能声明成员变量)

2.只要某个类遵循了这个协议,就相当于拥有了这个协议中的所有方法声明。

3.只要父类遵循了这个协议,就相当于子类也遵守了这个协议。

4.协议格式

//新建文件时选择protocol


//定义了一个名叫protocol的协议,声明需要的方法。<NSObject>这是遵守对应的协议

@protocol MyProtocol <NSObject>

//@required 要求实现,不实现就会发出报警

//@optional 不要求实现

@required

-(void)text;

-(int)text1;

@end

//声明,Person遵守了MyProtocol了,就是遵守了Protocol协议了,那么Person中就用了协议中的方法声明了。

@interface Person :NSObject<MyProtocol>

@end


5.一个类可以遵守多个协议

//声明,Person遵守了MyProtocol了,就是遵守了Protocol协议了,那么Person中就可以用协议中的方法声明了。

@interface Person :NSObject  <MyProtocol, MyProtocol2>

@end

6.基协议

*NSObject是一个基类,最根本最基本的类,任何其他类的最终都要继承它

*还有一个协议,名字叫NSObject,他是一个基协议,最根本最基本的协议

*NSObject协议声明很多最基本的方法,比如retain、release、description等

*建议每个新的协议都要遵守NSObject协议。


//一个协议遵守了谋一份协议,就可以拥有另外一个协议的所有方法声明

7.协议限制对象类型

a.要求obj保存的对象必须遵守MyProtocol这个协议

int main()

{

NSObject *obj = [[NSObject alloc] init];

NSObject *obj2 = @”456753159”;

//要求obj3保存的对象必须遵守MyProtocol这个协议

//在不使用对象的时候,会出现警告。

NSObject<MyProtocol> *obj3 =[[NSObject alloc] init]; //右边没有遵守协议,这样写会警告

NSObject<MyProtocol> *obj4 = [[Personalloc] init]; //Person遵守了协议,这样写是成立的。

//要求obj5,保存的对象必须遵守MyProtocol3协议,并且继承Person

Person<MyProtocol> *obj5 = [[Personalloc] init];

Obj5 = nil;

Return 0;

}


//用来替代#import包含头文件Hashiqi、MyProtocol

@class Hashiqi;

@protocol MyProtocol2;

//在声明中

//声明了obj变量,为id类型,并且遵守了MyProtocol协议

@property (nonatomic, strong)id<MyProtocol> obj;

@property (nonatomic, strong) Hashiqi *dog;

8.Protocol协议总结

//协议的定义


//如何遵守协议

 

//协议中方法声明的关键字

 

//定义一个变量的时候限制变量遵守某个协议


//@proterty中声明的属性也是可用作一个遵守协议的限制


//协议的其他应用总结


9.代理设计模式(协议的应用

a.一个人让另外一个人去买票

//Person类

//声明

@interface Person : NSObject

//拥有一个代理属性

@property (nonatomic, retain) Agent*delegat

-(void)buyTicket;

@end

//实现

@Implemention Person

-(void) buyTicket

{

//叫代理去帮自己买票(询问票价,剩余多少票)

 

}

-(void)dealloc

{

[_delegat release];

[super dealloc];

}

 

@end


//Agent(代理)类

//声明

@interface Agent: NSObject

@end

//实现

@Implemention Agent

@end


//主函数

Int main()

{

//人对象

Person *p = [[person alloc] init];

//代理买票对象

Agent *a = [[Agent alloc] init];

//人打算买电影票

[p buyTicket];

 

[p release];

[a release];

Return 0;

}


 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值