Block 块的手动管理内存的注意事项

//1.栈是由系统来分配内存存放基本数据类型和方法参数

//2.堆是由你来分配和管理内存存放类类型能使用copy等修饰符的

//3.全局区全局变量,静态变量当程序结束时会释放内存

//4.常量区NSString *str =@"123";

//5.方法区

//创建局部block时系统默认把其创建在栈出了当前block方法体就会被自动释放当block类型是NSGlobalBlock使用copy retain release都是无效的如果没有使用外部变量默认是NSGlobalBlock

//当block引用外部变量时会转化类型成NSStackBlock对copy操作有效果:会把block类型改变成NSMallocBlock copy后的block放在堆上面对copy和retain release操作有效

//注意NSMallocBlock类型的Block虽然使用copy retain release有效但是系统显示的引用计数一直1尽量不要对block使用retain

//Block_copy(.......)和copy效果一样

//Block_release(.......)和release效果一样

inta =1;

totalBlockmyblock=^(void)

{

NSLog(@"%d",a);

};

myblock();

NSLog(@"111-----%@",myblock);

totalBlockmyblock1 =[myblockcopy];

NSLog(@"222-----%@",myblock1);

NSLog(@"444-----%@",myblock);

[myblock1  retain];

NSLog(@"555-----%d",[myblock1  retainCount]);


Block 块的手动管理内存的注意事项_第1张图片


Block 块的手动管理内存的注意事项_第2张图片

你可能感兴趣的:(Block 块的手动管理内存的注意事项)