iOS block使用总结
来源:互联网 发布:mac设置iphone铃声2017 编辑:程序博客网 时间:2024/05/01 17:55
(一)blok简单语法
block 声明 :
int (^myblock)(int a);
block 实现 :
myblock = ^(int a){ a=1+a; NSLog(@"a=%i",a); return a; };
block 调用 :
myblock(1);
(二)block回调:
ViewController.m
blockViewController *blockview = [[blockViewController alloc]init]; blockview.myblock = ^(int a){ a=1+a; NSLog(@"a=%i",a); return a; };[self.navigationController pushViewController:blockview animated:YES];
blockViewController.h
@property (nonatomic , copy) int (^myblock)(int);
blockViewController.m
self.myblock(1);
打印结果:
2015-10-22 09:33:08.805 block总结[631:22503] a=2
(三)block 使用中注意点
1、block可以访问局部变量,但是不能修改
修改局部变量,在block代码块中声明前加 __block
__block int num = 0; blockview.myblock = ^(int a){ num = num+1; a=1+a; NSLog(@"a=%i",a); NSLog(@"num=%i",num); return a; };打印结果:
2015-10-22 09:59:48.518 block总结[677:33725] a=2
2015-10-22 09:59:48.519 block总结[677:33725] num=1
2、防止在block内使用self导致循环引用
__weak typeof (self) weakSelf = self; blockview.myblock = ^(int a){ weakSelf.str = @"1"; return a; };
3、在 doSomething 内,weakSelf 不会被释放。但,下面的情况除外:
__weak __typeof__(self) weakSelf = self; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [weakSelf doSomething]; [weakSelf doOtherThing];});在 doSomething 中,weakSelf 不会变成 nil,不过在 doSomething 执行完成,调用第二个方法 doOtherThing 的时候,weakSelf 有可能被释放,于是,strongSelf 就派上用场了:
__weak __typeof__(self) weakSelf = self; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ __strong __typeof(self) strongSelf = weakSelf; [strongSelf doSomething]; [strongSelf doOtherThing];});
__strong
确保在 Block 内,strongSelf 不会被释放。
如有错误欢迎批评指正
0 0
- iOS block使用总结
- iOS-block的总结
- iOS block 总结
- iOS中Block总结
- iOS-Block的总结
- iOS总结 - Block
- Block编程总结【iOS】
- iOS Block在ARC/非ARC下的使用总结
- iOS Block在ARC/非ARC下的使用总结
- iOS Block在ARC/非ARC下的使用总结
- iOS中关于block使用的一些总结
- ios 中使用 block
- IOS 使用Block
- iOS 使用Block
- IOS之Block使用
- iOS block使用
- iOS学习-Block使用
- ios block初级使用
- 【Navicat for MySQL】提示2003 - can't connect to MySQL server on 'localhost' 10060
- 通过IIS发布网站
- 过滤字符串中不属于指定集合的字符
- 数字证书原理(1)
- 各种BUG管理工具BUG的状态。
- iOS block使用总结
- spring 数据库
- 使用httpget方式获取网络上的图片
- VB文档读写和数据库读写的相关总结
- 修改jboss启动端口
- libsvm处理数据集
- css样式重置
- 使用VS最新版本编写cpp程序调用C语言中函数可能报错的原因
- cocoapods 使用 二、实战代码篇章