block的一些用法

__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 }
时间: 2024-08-29 22:51:39

block的一些用法的相关文章

IOS中 Block简介与用法(一)

?Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是"^",接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal.行为主体可以用return回传值,类型会被compiler自动辨别.如果没有参数列要写成: ^(void). 例如下面的一个例子: [cpp] vi

iOS中Block的基础用法

本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道Block的精妙之处. Block简介 Block是一种比较特殊的数据类型.它可以保存一段代码,在合适的时候取出来调用. Block的修饰 ARC情况下1.如果用copy修饰Block,该Block就会存储在堆空间.则会对Block的内部对象进行强引用,导致循环引用.内存无法释放.解决方法:新建一个

[HMLY]10.iOS中block的基础用法

本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道Block的精妙之处. Block简介 Block是一种比较特殊的数据类型.它可以保存一段代码,在合适的时候取出来调用. Block的修饰 ARC情况下1.如果用copy修饰Block,该Block就会存储在堆空间.则会对Block的内部对象进行强引用,导致循环引用.内存无法释放.解决方法:新建一个

block的常见用法

一.声明和定义 1.声明 声明方式:返回值(^block)(参数).声明时,参数变量名可以省略:使用时,参数变量名不能省略,不然会无法调用传入的参数 void(^block)(); void(^block)(int); int(^block)(int); 2.定义 无参无返回值.可以省略写 void(^block)() = ^{};void(^block)() = ^(){}; 有参无返回值. void(^block)(int) = ^(int a){}; 有参有返回值.返回值可以省略,也可以不

block的基本用法

block语法 1.代理协议和通知的区别 :两者的对象直接的耦合性不同.通知的代码的可读性太差.  代理,通知,block三种通信都实现了对象之间的解耦合. 通知的通信方式是1对多;代理,block是1对1 2.block(闭包):与函数相似,是一个匿名的函数代码快,此代码可以作为参数传递给其他对象 3. /* 局部的基本数据类型变量,进入到block中,num会变成常量.如果需要在block中对num进行修改,需要加上关键字__block (我们也可以用static关键字进行修饰,也可以设置成

Objective-C语言中的Block简介以及用法.

Block语法是在iOS4.0的SDK 中开始新增的, 在那时就已经有了超过400多个API使用了Block语法. Block对象又同样是继承与NSObject, 是C语言级别的语法和运行时特性. 和标准的C函数指针类似. 但其除了可执行语句外, 还可以类似对象可以保持状态数据. 和C语言的函数指针类似, 但不完全相同. 常用来作为回调函数使用. Block和函数的操作符对比: 函数指针使用的是 ‘*’ Block使用的是 ‘^’ 下面是例子: apple.h文件 #import <Founda

IOS block的一些用法例子

首先用一张图解释block的结构: 按照调用函数的方式调用块对象变量就可以了: int result = myBlock(5); // result是 35 例子1:利用block延迟方法的执行 /** * 在主线程中延迟调用方法 * * @param block 方法主体block块 * @param delay 延迟delay秒 */ - (void)performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay { i

iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)

[摘要]这篇文章,首先在第1节中介绍Block的定义,以及与C里面函数的对比.然后,第2节介绍实际开发中经常会用到的Block语法形式,以供读者日后查阅.只知道怎么用却不知什么时候用?所以随后的第3节将介绍Block的应用场景.然而,用Block不当导致了Crash?所以,第4节有必要了解Block捕获变量的特性,以及循环引用的解决.另外,千万不要懒,一碰到Block就weak,要区分哪些不会引起循环引用.然而,如果对Block的内存机制不熟悉,也会导致Crash,所以第5节会介绍Block的内

猫猫学iOS 之BLOCK的妙用_利用block实现链式编程

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:场景 我们有个对象人,他有两个方法,一个是学习study,一个是跑步run, 这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这个对象作为下一次调用的快捷方式,代码如下: 调用: int main(int argc, const char * argv[]) { @autoreleasepool { //初始化