标签:
__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 }
标签:
原文地址:http://www.cnblogs.com/Apologize/p/4775830.html