iOS_block内存分析

----------------------MRC情况下Block内存分析----------------------------

1.如果在block中使用全局变量,他为了持有这个变量,会将对应的对象加一

2.使用__block,避免循环引用

3.在block中使用局部变量的时候,会将变量复制一份存放到常量区(可以使用,但是不可以更改)

4.在MRC环境下:block中访问局部对象的时候,会将计数值加一
5.在MRC环境下:__block的作用:(1)修饰局部对象的时候,不会被block加一
                                             (2)使用__block修饰局部变量的时候,可以在block中更改值

6.当Block访问全局变量的时候,为了让全局变量不销毁,将属性对应的对象reatin
7.当Block访问方法的时候,为了保证方法的存在,将对应的对象retain
   

----------------------ARC情况下Block内存分析---------------------------

1.在ARC情况下:__block的作用只有一个:修饰变量的时候,在block中可以修改

2. 在ARC情况下解决循环引用的方式:__weak

3.使用__weak,可以解决循环引用,但是不能访问当前类中属性

4.如果需要改变则可以作如下操作:

    [button addBlockAction:^(UIButton *button) {
        //如果想访问当前类的属性,做如下操作
        __strong SecondViewController *strongThis = weakThis;
//        _index = 30;
        //报错
//        weakThis->_index = 30;
        //解决方式
        strongThis -> _index = 30;

        [strongThis test];
        [strongThis.navigationController popViewControllerAnimated:YES];
    }];
时间: 2024-10-15 11:37:48

iOS_block内存分析的相关文章

进制、内存分析

一.进制 1.什么是进制 是一种计数的方式,数值的表示形式 汉字:十一   十进制:11  二进制:1011  八进制:13 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个整数,我们至少有4种表示方式 软件开发,肯定要了解这个 2.二进制 1>   特点:只有0和1,逢2进1 2>   书写格式:0b或者0b开头 3>   使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 4>   二进制和十进制的互相转换 5>   n为二进制位所能表示的数据范围(

java 内存分析之方法返回值二

package Demo; class Point { private double x, y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y)

JS内存泄漏 和Chrome 内存分析工具简介(摘)

原文地址:http://web.jobbole.com/88463/ JavaScript 中 4 种常见的内存泄露陷阱 原文:Sebastián Peyrott 译文:伯乐在线专栏作者 - ARIGATO 链接:http://web.jobbole.com/88463/ 点击 → 了解如何加入专栏作者 了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读

C语言内存分析

一.进制 概念:进制是一种计数方式,是数值的表现形式 4种主要的进制: ①. 十进制:0~9 ②. 二进制:0和1 ③. 八进制:0~7 ④. 十六进制:0~9+a b c d e f C语言在默认的情况下为十进制. int num=1010; // 十进制 int num=0b1100; // 二进制,以0b或者是0B开头 int num=014; // 八进制,以0开头 int num=0x4; // 十六进制,以0x开头 占位符: %d和%i :十进制整数的形式输出一个值 %o :以不带符

变量的内存分析

一.字节和地址 1.内存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间就相当于是每个字节,地址就是房号,根据房号可以找到房间(根据地址也可以找到内存中的字节).相邻房间的房号是连续的,相邻字节的地址也是连续的.计算机中通常以十六进制表示地址. 2.不同数据类型占用的字节是不一样的,数据越大则占用的字节数越多.如在64位编译器下,int类型占据4个字节,char类型占据1个字节. 二.变量的存储 1.内存寻址由大到小

黑马程序员——C语言——内存分析

内存分析主要包括以下几部分内容:进制.类型说明符.位运算和关于char类型的一些内容. 一. 进制(二进制.八进制.十进制.十六进制) 1.二进制 ①  特点:只有0和1,逢2进1 ②  书写格式:0b或者0b开头 ③  使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 ④  二进制和十进制的互相转换 ⑤  n为二进制位所能表示的数据范围(不考虑负数):0~2的n次方-1 2.八进制 ①  特点:0~7,逢八进一 ②  书写格式:0开头 ③  八进制和二进制的互相转换 3. 十六进制

1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

 1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h> /*按照8位的长度打印一个数值*/ void dis8bit(char val) { int bit = 8; while(bit--) { if(1<<bit&val){ printf("1"); } else { printf("0"); } if(!(bit%4)) printf(" "); } putchar(1

js:深入prototype(上:内存分析)

/** * 以下演示了通过原型的创建方式,使用基于原型的创建可以将属性和方法 * 设置为Person专有的,不能通过window来调用. * 原型是javascript中的一个特殊对象,当一个函数创建之后,会随之就产生一个原型对象 * 当通过这个这个函数的构造函数创建了一个具体的对象之后,在这个具体的对象中,就会有一个属性指向原型 */ //第一种状态 function Person(){                        } //第二种状态 Person.prototype.nam

Windows系统内存分析工具的介绍

? Windows系统内存分析工具的介绍(进程管理器,资源管理器,性能监视器, VMMap, RamMap,PoolMon) 微软官方提供多种工具来分析Windows 的内存使用情况,除了系统自带的任务管理器(Task Manager), 资源监视器(Resource Manager), 性能监视器(Performance Monitor), 还有SysInternals工具, ?RamMap, PoolMon用以分析内存问题.本文简单介绍上述工具的快速使用方法,如果需要了解深入了解,请参考微软