Block 心得体会

首先不介绍block的基本概念等,推荐对block的精华阐释:block一点也不神秘

其次说说我的理解:

1.  属性block是可以类比代理来传值的。 因为block里面含参数

例如: 设VC2中有个block的属性,在VC1中初始化VC2,并拿到VC2的block属性,定义block,也是就VC1拿到block中的参数do sth。
在VC2中调用block并传参数,并执行block即可。
这样就是VC2把参数传给block,然后执行block,此时VC1拿到block中的参数,do sth。

这种情况相当于:VC1是VC2的代理。block是协议。
谁要让代理做事,谁就要有block作为属性。

2. block作为方法中的参数。

我的理解为:block就是代码块,一段特定的代码。当执行这个方法时,方法会在适当的时候调用作为参数的block 。
注意:block里面的参数,是这个方法给的,相当于已知条件。方法传参数给这个block,你来决定这个block应该做哪些事。
关键是:block作为参数,是由外部定义的,因此想干嘛干嘛。再次推荐精华block一点也不神秘

3. block的缺点:如果A要B做某事,就必须B去实现A的block属性。那么现在最关键的问题是,当B要实现A的block时,B必须能够拿到A。

这才是block最关键的地方!!!


4.  用__WEAK 来解除循环引用,注意要关联对象啊。
//获得头像后显示出来

__weakmeLeft*weakMe ;

headVC.passImage= ^(UIImage*image){

weakMe.headImageView.image= image;

};

这段白写了,因为__weakmeLeft*weakMe ;没有指向任何对象啊,仅仅只是一个空指针啊。
应该这样写:__weak meLeft*weakMe = me;
__weak typeof(self) weakSelf =self;


5. block用作函数的参数


两种方法:

A> 直接法:直接写在函数参数里面:- (void)abc:(void (^)(NSString *temp))para ;

B>间接法:利用typedef 定义一个block类型 再把它加到函数参数里面去

//定义了一个block类型 叫completionBlock

typedef void(^completionBlock)(NSString *content,NSString *ispraised);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容