Objective-C加强-block代码块和protocol协议

原创 2015年11月20日 21:43:18

一、block代码块

block是一个变量,这个变量类似c语言中的函数指针,在回调场合用的特别多。它可以封装代码,有返回值有形参

//没有返回值没有形参的block
void (^myblock)() = ^{
    NSLog(@"----------------");
    NSLog(@"----------------");
};
//有返回值有形参的block
int (^sumblock)(int, int) = ^(int a, int b){
    return a + b;
};

int c = sumblock(10, 11);
利用typedef定义block类型
typedef int (^MyBlock)(int, int);
myBlock sumb = ^(int a,int b){
        return a + b;
    };
    myBlock subb = ^(int a,int b){
        return a - b;
    };
    myBlock multiply = ^(int a,int b){
        return a * b;
    };
    
    NSLog(@"\n6 + 4 = %d\n6 - 4 = %d\n6 * 4 = %d",sumb(6,4),subb(6,4),multiply(6,4));
二、protocol协议

协议是一个方法签名的列表,在其中可以声明若干个方法。遵守该协议的类会去实现这个协议中规定的若干个方法,协议主要用来实现代理的

//协议的声明
#import <Foundation/Foundation.h>

@protocol TicketDelegate <NSObject>

// 返回票价
- (double) ticketPrice;

// 还剩多少张票
- (int) leftTicketsNumber;

@end

协议的总结

//1.协议的定义
@protocol 协议名称 <NSObject>
// 方法声明列表....
@end


//2.如何遵守协议
//1)类遵守协议
@interface 类名 : 父类名 <协议名称1, 协议名称2>

@end

//2) 协议遵守协议
@protocol 协议名称 <其他协议名称1, 其他协议名称2>

@end

//3.协议中方法声明的关键字
//1) @required (默认)
//要求实现,如果没有实现,会发出警告

//2)@optional
//不要求实现,怎样不会有警告

//4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议
类名<协议名称> *变量名;
id<协议名称> 变量名;
NSObject<MyProtocol> *obj;
id<MyProtocol> obj2;

//如果没有遵守对应的协议,编译器会警告

//5.@property中声明的属性也可用做一个遵守协议的限制
@property (nonatomic, strong) 类名<协议名称> *属性名;
@property (nonatomic, strong) id<协议名称> 属性名;

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

//6.协议可用定义在单独.h文件中,也可用定义在某个类中
//1) 如果这个协议只用在某个类中,应该把协议定义在该类中

//2)如果这个协议用在很多类中,就应该定义在单独文件中

//7.分类可用定义在单独.h和.m文件中,也可用定义在原来类中
//  一般情况下,都是定义在单独文件

版权声明:本文为博主原创文章,未经博主允许不得转载。

Objective-C协议(protocol)和委托(delegate)的基本概念(★firecat推荐★)

文章来源:http://www.cnblogs.com/cokecoffe/archive/2012/05/05/2537109.html 简单的介绍 1.1定义协议: 创建一个.h文件 1: ...
  • libaineu2004
  • libaineu2004
  • 2015年02月28日 16:26
  • 1196

Objective-C 【protocol-协议 的了解使用】

——————————————————————————————————————————— protocol(协议) (1)引文:OC中的protocol和Java中的接口(interface)比...
  • Felicity294250051
  • Felicity294250051
  • 2015年09月07日 08:16
  • 1848

Objective-C代码块Block详解

block代码块是OC的一个特性,除了可执行的代码外,还可能包含变量的自动绑定(栈),或内存托管(堆)。所以一个block维护一个状态集(数据),可以在任何时候执行。block用来作为回调特别有用。 ...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2015年10月25日 19:41
  • 2452

block块和Protocol(协议)

代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。 脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所...
  • u011118092
  • u011118092
  • 2016年07月25日 15:14
  • 101

黑马程序员------OC block(代码块)和protocol(协议)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------ 一、block代码块   1.block类型是一个c级别的语法和运行机制,他与标准c函数类似,不同...
  • Chxinyu92
  • Chxinyu92
  • 2015年08月01日 21:14
  • 201

Block和Protocol

Block和Protocolblock的基本使用什么是block? Block是iOS中比较特殊的数据类型.Block是苹果官方特别推荐使用的数据类型,应用场景比较广泛.应用场景: - 动画 -...
  • taofei0610
  • taofei0610
  • 2016年10月10日 02:17
  • 261

Objective-C-----协议protocol,代码块block,分类category

概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,本文将重点介绍objective-C中一些常用的语法特性。当然这些内容虽然和其他高级语言...
  • qq_27552297
  • qq_27552297
  • 2015年10月28日 10:53
  • 286

黑马程序员-@protocol协议代理与block代码块

一、@protocol关键字的应用 // // Person.h // 07协议的应用-代理模式 // // Created by 黄焕恩 on 16/1/5. // Copyright ©...
  • u012749656
  • u012749656
  • 2016年01月10日 10:49
  • 388

C++ Block(代码块)

Block是什么?Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象;它也很像C++中的函数对象,因为除了要执行的代...
  • WhiStLenA
  • WhiStLenA
  • 2016年07月27日 16:40
  • 2230

Objective-c中的Block(块)详解

Objective-c中的Block(块)详解 在Objective-c中NSArray是很常用的容器之一,很多时候我们需要对数组中的数据进行排序,因此与下面类似的代码会经常碰到:...
  • bboyfeiyu
  • bboyfeiyu
  • 2014年05月08日 11:30
  • 3434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Objective-C加强-block代码块和protocol协议
举报原因:
原因补充:

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