Objective-C Block数据类型 @protocol关键字

Block数据类型

Block封装了一段代码 可以在任何时候执行

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

苹果官方建议尽量多用Block 在多线程 异步任务 集合遍历 集合排序 动画转场用的很多

定义Block变量

void (^myBlock) ();

int (^sunBlock) (int, int);

利用Block封装代码

^ {

  NSLog(@"==========");

};

^() {

  NSLog(@"=========");

};

^(int a, int b) {

  return a + b;

};

Block访问外面变量

Block 内部可以访问外面的变量

默认情况下 Block内部不能修改外面的局部变量

给局部变量加上__block关键字 这个局部变量就可以在Block内部修改

利用typedef定义Block类型

typedef int (^MyBlock) (int, int); //以后就可以利用MyBlock这种类型来定义Block变量

MyBlock block;

MyBlock b1, b2;

b1 = ^(int a, int b) {

  return a + b;

};

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

  return a + b;

};

@protocol关键字

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

只要某个类遵守了这个协议 就相当于拥有这个协议中的所有方法声明

只要父类遵守了某个协议 就相当于子类也遵守了

协议的编写格式

@protocol 协议名称 <NSObject>

//方法声明列表

@end

某个类遵守协议

@interface 类名 : 父类 <协议名称1, ...>

@end

协议遵守协议

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

@protocol 协议名称 <协议名称1, ...>

//方法声明列表

@end

协议中方法声明的关键字

@required 要求实现 不实现会有警告 (默认)

@optionnal 可选实现

基协议

NSObject是一个基类 任何其他类最终都要继承它

还有一个NSObject基协议 声明了许多最基本的方法 比如 description retain release 等等

建议每一个新的协议都遵守NSObject基协议

定义一个变量时 限制这个变量保存的对象遵守某个协议

类名<协议名称> *变量名;

id<协议名称> 变量名;

NSObject<MyProtocol> *obj = [[NSObject alloc] init];

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

如果没有遵守对应的协议 编译器就会报错

时间: 2024-10-06 16:21:42

Objective-C Block数据类型 @protocol关键字的相关文章

黑马程序员— block、protocol和Foundation

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC内存管理的相关知识,了解了OC程序在运行中对象及变量是如何释放以达到不占用内存的效果.本章我们来学习OC的block,protocol协议和Foundation框架. 第一讲     block 1. block简介 block封装了一段代码,可以在任何时候执行 block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.

12-Objective-C特有语法:(高效率)block数据类型

一.         基本简介 block用来保存一段代码  block的标志:^ block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多 block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样 (和函数又有区别,函数是在编译之前就已经定义好了,是写死了的东西,而block在运行时可以凭空的产生一段运行代码) 二.        Block的特性 blo

小白学开发(iOS)OC_ block数据类型(2015-08-08)

// //  main.m //  block数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Calculate.h" //  定义一个函数 void test() { NSLog(@"test函数"); } int main(

block数据类型

// //  main.m //  04-block数据类型 // //  Created by apple on 14-3-18. //  Copyright (c) 2014年 apple. All rights reserved. // #import <Foundation/Foundation.h> #import "Calculate.h" //数据类型 //1.作为参数传递 //2.作为函数的返回值 //3.声明成变量 void test() { NSLog(

block和protocol

一.Block 1.基本概念 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符为^ // 用一个block输出n条横线 void (^lineBlock)(int) = ^(int n) { for (int i = 0; i<n; i++) { NSLog(@"----------------"); } }

Objective C block背后的黑魔法

前言 block在Objective C开发中应用非常广泛,我们知道block会捕获外部对象,也知道使用block要防止循环引用. "知其然而不知其所以然"是一件很痛苦的事情,那么block这套机制在OC中是如何实现的呢?本文通过从C/C++到汇编层面分析block的实现原理. Clang clang是XCode的编译器前端,编译器前端负责语法分析,语义分析,生成中间代码(intermediate representation ). 比如当你在XCode中进行build一个.m文件的时

黑马程序员_ Objective-c 之block、protocol学习笔记

一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值,而其本身又可以带输入参数或返回值  3> 苹果官方建议尽量多用block,在多线程.异步任务.集合遍历.集合排序.动画转场用的很多  4> Block可以在程序运行时凭空产生一个代码保存起来  2.block的标志:^  3.block跟函数很像 1> 可以保存代码  2> 有返回值 

黑马程序员——OC语言的Block与Protocol(协议)

Block ● Block封装了一段代码,可以在任何时候执?行 ● Block可以作为函数参数或者函数的返回值,?而其本?身又可以带输?入参数或返回值. ● 苹果官?方建议尽量多?用block.在多线程.异步任 务.集合遍历.集合排序.动画转场?用的很多 定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 Blocks的定义: int (^MySum)(int, int) = ^(i

OC - 6.block与protocol

一.block 1> 基本使用 相当于用来存放代码的代码块 效率高 若没有形参可以省略小括号 2> block与函数的相同点 可以保存代码 可以有返回值 可以有形参 调用方式一样 3> block对外部变量的访问 可以访问外部变量 默认情况下,不能在block内修改外部变量 用关键字__block修饰外部变量,就可以在block内修改它 4> 用typedef定义block类型与函数类型 定义block类型 ① 格式:typedef int (^myBlock)(int, int)