黑马程序员—Objective-C基础_block、协议
来源:互联网 发布:淘宝刷钻怎么刷 编辑:程序博客网 时间:2024/05/16 03:44
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
block
封装一段代码,可以在任何时间执行
block声明
int (^Sum)(int,int);
block定义
int (^Sum)(int,int) = ^(int a,int b){
return a + b;
}
定义一个block类型的变量,接收两个整型数据a,b,返回a+b的值
在block内部可以访问外部的变量,默认情况下,block内部不能修改外部的局部变量
如果需要修改局部变量的值,需要在局部变量的定义前加上__block关键字
利用typedef定义block类型
typedef int (^MyBlock)(int,int);
MyBlock b;
b = ^(int a,int b){
return a + b;
}
block的使用block的用法和函数很像:
可以保存代码,有返回值,有形参,调用的方法也一样。
@protocol协议
用来声明大量方法,只要某个类遵守这个协议,就能拥有此协议中所有的方法声明。只要父类遵守某个协议,子类也遵守此协议。
协议的使用方法
@protocol 协议名称
// 方法列表
@end
@interface 类名 : 父类<协议名称>
@end
协议中的关键字
@required:表示方法必须实现,不是想,编译器会发出警告
@optional:表示方法不一定要实现
协议遵守协议
一个协议可以遵守其他多个协议,多个协议之间用逗号隔开
一个协议遵守了另一个协议,就相当拥有了该协议中的方法声明
@protocol 协议名称<协议1,协议2>
@end
基协议
NSObject是一个基类,任何类都继承自它。
NSObject也是一个基协议,最基本的协议。包括很多最基本的方法的声明,如:description、retain、release等
每个西恩的协议都要遵守基协议NSObject。
定义变量时指定变量要遵守的协议,如果不遵守相应的协议,编译器就会发出警告。
类名<协议名称> *变量名;
定义成员变量遵守协议
@property (noatomic,strong) 类名<协议名称> *属性名;
协议可以定义在单独的.h文件中,也可定义在某个类中。
如果协议只用在某个类中,应该把协议定义在该类中。
如果协议用在很多类中,则定义在单独的文件中。
协议的简单应用
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net block
封装一段代码,可以在任何时间执行
block声明
int (^Sum)(int,int);
block定义
int (^Sum)(int,int) = ^(int a,int b){
return a + b;
}
定义一个block类型的变量,接收两个整型数据a,b,返回a+b的值
在block内部可以访问外部的变量,默认情况下,block内部不能修改外部的局部变量
如果需要修改局部变量的值,需要在局部变量的定义前加上__block关键字
利用typedef定义block类型
typedef int (^MyBlock)(int,int);
MyBlock b;
b = ^(int a,int b){
return a + b;
}
block的使用
// 自定义一个block类型MyBlock
typedef int(^MyBlock)(int,int);
int main()
{
int a,b;
a = 10;
b = 10;
__block int c;
// 定义block类型的变量block
MyBlock block = ^(int num1,int num2){
// 调用外面局部变量
c = 5;
// block内可以访问外面的局部变量
num1 = a+c;
return num1 + num2;
};
// 调用block
block(a,b);
return 0;
}
可以保存代码,有返回值,有形参,调用的方法也一样。
@protocol协议
用来声明大量方法,只要某个类遵守这个协议,就能拥有此协议中所有的方法声明。只要父类遵守某个协议,子类也遵守此协议。
协议的使用方法
@protocol 协议名称
// 方法列表
@end
@interface 类名 : 父类<协议名称>
@end
协议中的关键字
@required:表示方法必须实现,不是想,编译器会发出警告
@optional:表示方法不一定要实现
协议遵守协议
一个协议可以遵守其他多个协议,多个协议之间用逗号隔开
一个协议遵守了另一个协议,就相当拥有了该协议中的方法声明
@protocol 协议名称<协议1,协议2>
@end
基协议
NSObject是一个基类,任何类都继承自它。
NSObject也是一个基协议,最基本的协议。包括很多最基本的方法的声明,如:description、retain、release等
每个西恩的协议都要遵守基协议NSObject。
定义变量时指定变量要遵守的协议,如果不遵守相应的协议,编译器就会发出警告。
类名<协议名称> *变量名;
定义成员变量遵守协议
@property (noatomic,strong) 类名<协议名称> *属性名;
协议可以定义在单独的.h文件中,也可定义在某个类中。
如果协议只用在某个类中,应该把协议定义在该类中。
如果协议用在很多类中,则定义在单独的文件中。
协议的简单应用
#import <Foundation/Foundation.h>
// protocol1继承了基协议
@protocol protocol1 <NSObject>
@optional// 表示run方法不一定要实现
- (void)run;
@end
// protocol2协议 继承自protocol1协议
@protocol protocol2 <protocol1>
@required// 表示eat方法必须实现
- (void)eat;
@end
// 创建一个类Person遵守协议protocol2
@interface Person : NSObject<protocol2>
@end
@implementation Person
// 协议要求必须实现eat方法
- (void)eat
{
NSLog(@"吃了一顿");
}
@end
int main()
{
// 创建了一个对象,遵守协议protocol2
NSObject<protocol2> *p1 = [[Person alloc] init];
// [p1 run]; run方法没有实现,运行程序会出错,但是调用run方法,编译器不会报错
[p1 eat];
NSObject<protocol1> *p2 = [[Person alloc] init];
// [p2 eat]; // p2遵守protocol1协议,无法调用eat方法
return 0;
}
协议可以定义在单独的.h文件中,也可定义在某个类中。如果协议只用在某个类中,应该把协议定义在该类中;如果协议用在很多类中,则定义在单独的文件中。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
0 0
- 黑马程序员—Objective-C基础_block、协议
- 黑马程序员_OC基础09_block
- 黑马程序员_block
- 黑马程序员——ios基础---Objective-C:ARC、类别、Block、协议
- 黑马程序员——Objective--C笔记之协议
- 黑马程序员——ios基础---Objective-C:基础语法
- 黑马程序员-----------Objective-C基础-----------OC基础
- 黑马程序员——Objective-C——OC基础
- 黑马程序员——ios基础---Objective-C:Foundation
- 黑马程序员—Objective-C基础_封装、继承、多态
- 黑马程序员—Objective-C基础_构造方法
- 黑马程序员—Objective-C基础_内存管理(1)
- 黑马程序员—Objective-C基础_内存管理(2)
- 黑马程序员—Objective-C基础_基本语法
- 黑马程序员----objective-C 基础语法篇
- 黑马程序员--iOS--Objective-C基础 (一)
- 黑马程序员-----------Objective-C基础-----------OC简介
- 黑马程序员-----------Objective-C基础-----------类方法
- 黑马程序员—Objective-C基础_构造方法
- 黑马程序员—Objective-C基础_分类以及类的本质
- 时移回看正常,但出现“节目不存在”
- Interleaving String
- 取图像rgb灰色值和反色值公式
- 黑马程序员—Objective-C基础_block、协议
- linux下创建任意大小文件 —— dd命令
- 黑马程序员—Objective-C基础_内存管理(1)
- jvm垃圾回收机制
- 题目1052:找x
- 正在使用的语料库
- Java NIO框架Netty教程(十)-Object对象的连续收发解析分析
- Easyui实现省市县三级联动
- 黑马程序员—Objective-C基础_内存管理(2)