Block系列2:Block内存管理
ViewController.h
#import <UIKit/UIKit.h> @interface ViewController : UIViewController
{
UIImage *_image;
NSInteger _index;
} @end
ViewController.m
#import "ViewController.h"
#import "Person.h"
@interface ViewController () @end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad]; //规则1-- block调用Object-C的对象,对象会被retain UIButton *button = [[UIButton alloc]init]; //retainCount 1
//使用__block修饰,引用计数不会加1
__block UIButton *btn2 = [[UIButton alloc]init]; //retainCount 1 //规则2-- block调用基本数据类型。那么基本数据类型被看成是常量
int number = 10;
__block int num = 20; //规则3-- block引用实例变量(全局变量或者能够觉得是属性)。该实例所在的对象会被retain
_image = [[UIImage alloc]init];
_index = 30;
//声明加实现
void (^myBlock)(int) = ^(int a){ //对象
NSLog(@"button的地址:%p",button); //retainCount 2
NSLog(@"btn2的地址:%p",btn2); //retainCount 1 //基本数据类型
//错误,常量不能被再次赋值
// number = 20;
num = 10;
NSLog(@"num:%d",num+a);
//这种方法不准确。不建议使用 (required)
// Do not use this method. (required)
// NSLog(@"%d",button.retainCount); //实例变量【属性】
// block引用image,image所属的对象self【ViewController】会被retain
NSLog(@"_image的地址:%p",_image); };
myBlock(10);
[button release];
[btn2 release]; Person *person = [[Person alloc]init];
//实现block
[person testBlock:^(int a) {
//_index为全局变量
//block引用_index,_index所属的对象self【ViewController】会被retain
NSLog(@"a+_index = %d",a+_index);
}]; }
person.h
#import <Foundation/Foundation.h> typedef void(^PersonBlock) (int a); @interface Person : NSObject
//声明block
-(void)testBlock:(PersonBlock )block; @end
person.m
#import "Person.h" @implementation Person
//调用block
-(void)testBlock:(PersonBlock )block
{
block(10);
}
Block系列2:Block内存管理的更多相关文章
- block没那么难(三):block和对象的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...
- block没那么难(二):block和变量的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 了解了 block的实现,我们接着 ...
- block 实现原理(内存管理详解)(二)
在以前,MRC环境下,使用block很可能会出现内存泄漏问题,并且在以往的面试中,一些接触比较久的程序员都会喜欢问到这个问题,block内存泄漏的问题! 下面,我来介绍一下,MRC下Block内存泄漏 ...
- Block(二)内存管理与其他特性
一.block放在哪里 我们针对不同情况来讨论block的存放位置: 1.栈和堆 以下情况中的block位于堆中: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Block(二)内存管理与其他特性-b
一.block放在哪里 我们针对不同情况来讨论block的存放位置: 1.栈和堆 以下情况中的block位于堆中: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- iOS开发系列—Objective-C之内存管理
概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...
- C语言深入学习系列 - 字节对齐&内存管理
用C语言写程序时需要知道是大端模式还是小端模式. 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中:所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高 ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存
iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(2)
/* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 */ /******************* ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(1)
单个对象的内存管理非常简单无非就是alloc对应release,retain对应release.但是如果涉及到很多对象,而且对象与对象有联系的时候该怎么去管理对象的内存呢. 比如同样一本书有好3个人购 ...
随机推荐
- krpano--控制热点跳转到场景的指定视角
krpano课堂(肥宗) · 2015-07-13 19:32 有这么一种情况,假设我们用三个场景,这三个场景恰好是一条街道的同一方向的三个拍摄点.如上图. 我们可以通过设置A.B.C三个场景中的vi ...
- Getting or Setting Pixels
Getting or Setting Pixels The safe (slow) way Suppose you are working on an Image<Bgr, Byte>. ...
- [BZOJ2661][BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1349 Solved: 577[Submit][ ...
- [python] 如何将unicode字符串转换为中文
答案:(http://stackoverflow.com/) ps:这个网站解决了我好多问题啊,大家多上 >>>s='\u9648\u4f1f\u9706\u5176\u5b9e\u ...
- 【NOIP2007】字符串展开解题报告
描述 Description 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用 ...
- P1162 填涂颜色 洛谷
题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...
- MySQL 一张表中两个字段值互换
update table a, table b set a.filed1= b.field2, a.field2= b.field1where a.id = b.id
- 【后缀数组】【二分答案】【差分】poj1743 Musical Theme
差分消除加减一个值得影响,貌似r二分上界要设成(n-2)/2?为啥? sa求不可重叠最长重复子串 给定一个字符串,求最长重复子串,这两个子串不能重叠.算法分析:这题比上一题稍复杂一点.先二分答案,把题 ...
- 【二分法】【尺取法】bzoj2348 [Baltic 2011]Plagiarism
一开始以为死于精度……调了半天发现死于long long…… 一.二分法: #include<cstdio> #include<cstring> #include<alg ...
- [CEOI2017]One-Way Streets
题目大意: 给你一个无向图,现在告诉你一些点对(u,v), 要你在保证从u到v的所有路径都不变的情况下,尽可能把所有的边变成单向边, 问你可以唯一确定哪些边的方向,以及方向是从u到v还是从v到u. 思 ...