码迷,mamicode.com
首页 > 其他好文 > 详细

block的一些用法

时间:2015-09-01 16:33:25      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

__weak typeof(self) weakSelf = self的应用
意思是声明了一个self类型的weakSelf,加上__weak表示它是弱引用的。整行代码就是给self定义了一个弱引用性质的替身。
一般用在block上,因为block会copy它内部的变量,可能会造成循环引用,使用__weak性质的self代替self,可以切断block对self的应用,避免循环使用。如

 1 if (nil == error) {
 2     __weak typeof(self) weakSelf = self;
 3     dispatch_async(dispatch_get_global_queue(0, 0), ^{
 4         /*异步解析*/
 5         NSArray  *array = EncodeArrayFromDic(jsonItems,@"data");
 6                 
 7         NSMutableArray *arrayDtos = [NSMutableArray array];
 8         for (NSDictionary *item in array) {
 9             DocMsgModel *dto = [DocMsgModel parser:item];
10             if (nil != dto) {
11                 [arrayDtos addObject:dto];
12             }
13         }
14                 
15         dispatch_async(dispatch_get_main_queue(), ^{
16             [weakSelf.delegate manageMainView];
17         });
18     });
19 }

 

block可以把函数当做属性来声明,虽然也可以直接在.h中写方法,这两种写法作用是一样的,只是写法不同。如下
在TableCell.h中

1 @property (nonatomic,strong) UIView *cellDownBg;
2 @property (nonatomic,copy) void(^deleteBtnClickBlock)(NSString *contentID);
3 //该block写法和下边的作用一样
4 //-(void)deleteBtnClick:(NSString *)contentId;

然后使用block时还需设置self(指的是controller)为weak型
在controller的.m中,

1 -(void)someFunction{
2     __weak typeof(self) weakSelf = self;
3     TableCell *cell = [[TableCell alloc] init];
4     cell.deleteBtnClickBlock = ^(NSString *contentID){
5         [weakSelf deleteContentWithContentId:contentID];
6     }
7 }

 

block的一些用法

标签:

原文地址:http://www.cnblogs.com/Apologize/p/4775830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!