黑马程序员——OC基础04—block、protocol

原创 2015年11月18日 09:54:29

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、block

1、block实在函数运行时,存储着回调期间的代码,同时又包含着执行期间的重要收据。
2、block也分为无参无返回值、无参有返回值、有参有返回值、有参无返回值。

1)无参无返回值 的block的定义

    void (^myblock)() =  ^(){  

       NSLog(@"block的函数体");  
    };   


     void (^myblock)() =  ^{  

      NSLog(@"block的函数体");  
  };  //后面函数体的小括号在无参数是可以省略 

2)有参有返回值block的定义

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

2、
typedef 预处理指令可以快捷的设置Block的类型

typedef void(^类型名)();
例如:typedef void (^myBlock)(int int);

myBlock sum; //此时sum变量被定义为Block类型。
sum=^(int a, int b){
return a+b;
}

3.Block 访问外部变量
当定义block时,会把外部变量以const的方式存放到Block所在的内存中;

在内部的变量的值不能被修改,但是可以被重新定义(存到栈区)。

当要修改外部的局部变量时,必须在要访问的局部变量的类型前面加上__block(注意:这里是两个下划线__block) 关键字,才可以在block代码块中进行访问。修改后的值存放在堆区。

__block int c = 7;  

MyBlock myBlock = ^(int a, int b){  

    c=100;
    NSLog(@"c=%d",c);
    }
//此时c的值可以被修改

二、protocol

1、protocol就是一些方法的声明,一般写到一个.h的文件中,以供其他类去遵守,这些方法分为必须实现和选择实现;protocol也成为正式协议。

使用流程:定义协议.h >>>在类中采纳指定协议>>>实现协议中的方法

2、注意:协议名称一般与文件名称相同,提高代码的可读性。
当遵守了某个协议后,就代表了声明了协议中的方法;
一个协议可以遵守其他协议;
一个类可以遵守多个协议;
一个协议也可以被多个类同时遵守。
3、定义协议

#import <Foundation/Foundation.h>  

@protocol MyProtocol <NSObject>  
 //protocol 协议名称 <NSobject> 


@required  
- (void)test;  
//@required 是要求遵守协议的类实现这个方法,不实现时只会发出警告  

@optional  
- (void)test2;  
 //@optional 不要求遵守协议的类实现这个方法   

@end  
4.格式:@protocol 类名 <协议名称>
这里的协议名称同定义时候的相同,如果为多个协议,可以以<aaa,bbb,ccc>的格式进行采用。



@interface Person : NSObject <MyProtocol, MyProtocol2>  

@end  

@protocol MyProtocol <MyProtocol2>  

变量的遵守某个协议时,如下这样使用:


id <MyProtocol> obj;  


属性遵守某个协议时,如下使用:



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

“`

黑马程序员——OC基础---Block、protocol

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-一、block 1.介绍 Block 封装了一段代码,可以在任何时候执行,Block可以作为函数参数或者函数的...
  • a383003270
  • a383003270
  • 2015年11月02日 23:38
  • 81

黑马程序员——OC基础---block,protocol

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- block 1> 如何定义block变量  int (^sumBlo...
  • zydsr900230
  • zydsr900230
  • 2015年07月11日 16:27
  • 232

黑马程序员 OC基础: Block 和 Protocol

BlockBlock 封装了一段代码,可以再任何时候执行. 与函数指针非常类似的东西,但是据说功能更强大.日后慢慢体验.如何定义 block 变量int (^sunBlock)(int, int);v...
  • Stumm
  • Stumm
  • 2015年04月09日 20:44
  • 256

黑马程序员------OC基础-----block和protocol

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、block block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用...
  • u012883550
  • u012883550
  • 2015年02月08日 20:45
  • 162

(面试加分题)OC中block的基本用法与深入了解

block的基本用法 block是一种数据类型,可以使一段代码块变成一个变量,格式和函数很像. 1,无参无返回: void (^myblock)() = ^(){  ...... };(无参的话前...
  • aa605397965
  • aa605397965
  • 2015年07月16日 22:15
  • 760

黑马程序员--oc:block与protocol

一、Block  1.如何定义block变量  int (^sumBlock)(int, int);  void (^myBlock)();    2. 如何利用block封装代码  ^(int a,...
  • gululu23
  • gululu23
  • 2014年12月21日 00:17
  • 158

黑马程序员——OC基础---protocol(协议)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——第一讲 protocol概念及基本使用什么是协议?定义一些方法的声明,.h头文件中,协议的作用:供其他类去遵守,...
  • qq_27239329
  • qq_27239329
  • 2015年12月06日 18:43
  • 191

黑马程序员(OC特有语法-block和-Protocol)

------http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------...
  • ixx__123
  • ixx__123
  • 2014年08月24日 13:58
  • 233

黑马程序员- IOS学习笔记-OC ARC、BLOCK、protocol

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- ARC ARC是编译器特性 编译的时候会检测对象是否需要释放 ARC的判断准则:只...
  • lengnuanzizhi365
  • lengnuanzizhi365
  • 2015年02月06日 23:30
  • 121

黑马程序员——OC之ARC、Block、Protocol

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-ARC之前我们说了OC中的内存管理,很繁琐而且不易管理。ARC是自iOS 5之后增加的新特性,完全消除了手动管理内...
  • qq_26989441
  • qq_26989441
  • 2015年04月16日 22:17
  • 174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——OC基础04—block、protocol
举报原因:
原因补充:

(最多只允许输入30个字)