黑马程序员 block、protocol

本文详细介绍了iOS开发中Block的基础用法及其实例代码,包括如何定义、封装代码以及访问外部变量。同时阐述了Protocol的概念,解释了其在限制类类型、为类提供方法声明以及为类添加更多方法等方面的作用。通过实例展示了如何定义和遵守协议,以及协议中方法的声明和实现。最后总结了使用Block和Protocol带来的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——- android培训java培训ios培训期待与您交流!

一、block基础用法

block是OC中的一种数据类型,在iOS开发中被广泛使用
^是Block的特有标记

作用:
block用于封装一段代码,可以在任何时候使用。
block可以作为函数参数或者函数返回值,而其本身又可以带参数或返回值。

定义block变量

返回值数据类型(^变量名称)(参数类型,参数类型,...);
void(^变量名称)();

利用block封装代码:

返回值数据类型(^变量名称)(参数类型,参数类型,...);
变量名称=^(参数类型 形参名,参数类型 形参名,...){
    代码内容....
    代码内容....
    代码内容....
};

实例代码:

int main()
{
    //没有参数的block
    int a=10;
    void (^myBlock1)()=^{
        a=11;
        NSLog(@"a=%d",a);
    }
    myBlock1();
    //有参数的block并有返回值
    int (^myBlock2)(int,int);
    myBlock2=^(int m,int n){
        return m+n;
    }
    myBlock2(10,11);
    return 0;
}

注意:

1.block内部可以访问外面的变量
2.默认情况下,block内部不能修改外面的局部变量
3.给局部变量加上_block关键字,这个局部变量可以在block内部修改

利用typedef定义block类型

typedef 返回值类型 (^类型名)(参数,参数,...);

可以通过类型名声明变量

typedef void(^MyBlock)();
MyBlock myBlock=^{
    NSLog(@"This is  myBlock.");
}
myBlock();

二、protocol(协议)

只是用来声明方法

基本用途:

1.用来声明方法,不能声明成员变量
2.只要某个类遵守了这个协议,就相当于拥有了这个协议的所有方法声明
3.只要父类遵守了某个协议,那么子类也必定遵守

定义方法

@protocol 协议名称
声明方法
@end

遵守协议方式

@interface 类名:NSObject <协议名称,协议名称,...>
@end

注意:

类继承时,只能写一个,而协议可以是多个。
一旦遵守某个协议,就拥有这份协议中所有的方法声明

协议中可以声明某个方法要求它实现,也可以不必要求它实现

@required 要求实现,否则会提示警告,默认为@required
@optional 可以不实现

声明方式

@protocol myProtocol
- (void) test1;//必须实现
@required
- (void)test2;//必须实现
@optional
- (void)test3;//可以不实现该方法
@end

协议遵守协议

类似继承的原理,一个协议遵守了某个协议,那么,这个协议就拥有那个协议中的所有方法的声明

基协议

基协议的名称也为NSObject,最根本最基本的协议
NSObject协议中声明很多最基本的方法:description、retain、release等

三、总结

1.使用block的好处
1.程序运行的过程中保存需要的代码,可在后面进行调用
2.局部变量前加_block,可以在block中修改局部变量值
3.代替函数,执行一些操作
2.使用protocol的好处
1.限制类的类型,确保一些类中拥有特定的方法
2.为类提供方法的声明
3.为类添加更多的方法
3.协议的提前声明

引用协议时使用@protocol 协议名称,说明这个协议仅仅只是协议,并不知道这个协议中的内容,当真正要使用协议内容的时候,再使用@import 引入协议。

3.@property中属性的声明也可以遵守协议

@property(nonatomic,strong)id<协议名称> 类名;
@property(nonatomic,strong) 类名<协议名称> *类名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值