105,block的注意事项
来源:互联网 发布:java会员积分系统源码 编辑:程序博客网 时间:2024/04/29 14:50
#import <Foundation/Foundation.h>
@interface Person : NSObject
-(void)test;
@end
@implementation Person
-(void)test{
NSLog(@"Person!");
}
@end
int main(int argc,const char * argv[]) {
//1,block中可以访问外面的变量
//2,block中可以定义和外界同名的变量,并且如果仔block中定义了和外界同名的变量,在block中访问的是block中的变量
/*
3,默认情况下,不可以在block中修改外界变量的值
>因为block中的变量跟往外面的变量不是同一个变量,block中访问外界变量,block会把外界变量拷贝一份到堆内存中,所以,修改拷贝后的变量并不影响外界的变量
*/
/*
4,如果想在block中修改外面变量的值,必须仔外界变量前面加上__block
注:没有加__block,就是值传递,加了__block就是地址传递(引用传递)
*/
__block int num =10;
void (^changeNum)() = ^{
num = 20;
};
changeNum();
NSLog(@"num = %i",num);
/*
5,面试题:block是存储在栈中还是堆中?
>默认情况下,block存储在栈中,如果对block进行一个copy操作,block会转移到堆中,如果block仔栈中,block中访问外界的对象,那么,就不会对对象进行retain操作了,但是如果block在堆中,block中访问外界的对象,那么,会对对象进行retain依次。如果在block中访问外界的对象,一定要给对象加__block,无论是堆中,都不会对对象进行retain了
*/
__block Person *person = [[Personalloc]init];
NSLog(@"retainCount = %lu",[personretainCount]);
void (^accessPerson)() = ^{
[person test];
};
accessPerson();
NSLog(@"retainCount = %lu",[personretainCount]);
return 0;
}
//2015-12-18 15:05:40.335 12,block的注意点[2497:170739] num = 20
//2015-12-18 15:05:40.336 12,block的注意点[2497:170739] retainCount = 1
//2015-12-18 15:05:40.336 12,block的注意点[2497:170739] Person!
//2015-12-18 15:05:40.336 12,block的注意点[2497:170739] retainCount = 1
//Program ended with exit code: 0
- 105,block的注意事项
- block的注意事项
- block的使用和注意事项
- Block---注意事项
- block注意事项
- Block注意事项
- block 注意事项
- Block的基本使用、typedef给Block定义别名、Block的应用场景、Block的注意事项
- Block代码块的使用,和注意事项
- 关于block使用的5点注意事项
- 关于block使用的5点注意事项
- arc下的block使用注意事项
- 关于block使用的5点注意事项
- 关于block使用的5点注意事项
- 关于block使用的5点注意事项
- 关于block使用的5点注意事项
- 关于block使用的5点注意事项
- 关于block使用的5点注意事项
- 简单获取Android手机中图片方法
- 《挑战程序设计竞赛》2.2.2 贪心法-其它 POJ3617 3069 3253 2393 1017 3040 1862 3262
- @Resource
- jQuery响应式布局
- Java map详解 - 用法、遍历、排序、常用API等
- 105,block的注意事项
- LoadRunner数据更新与更新方式
- 119 nginx 80端口被占用
- json格式转换
- Ext.js5的小鲱鱼分页(11)(silding pager)
- 苹果APP Store应用上架流程
- NSCondition
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- hibernate设置