ARC 下处理内存暴涨的一个解决办法

有一种情况:

for (int i = 0; i < 1000000000; i++) {

        NSString *s = @"ABC";
        s = [s lowercaseString];
        s = [s stringByAppendingString:@"ac"];
        NSLog(@"%@", s);
    }

运行, 内存暴涨!!!!!!

这情况下, 给循环体里面的操作加一个 释放池 即可

 for (int i = 0; i < 1000000000; i++) {

        @autoreleasepool {

            NSString *s = @"ABC";
            s = [s lowercaseString];
            s = [s stringByAppendingString:@"ac"];
            NSLog(@"%@", s);
        }
    }

即每次执行完之后, 系统会自动帮我们立即释放, 这就不会使内存暴涨了

时间: 2024-11-05 02:28:42

ARC 下处理内存暴涨的一个解决办法的相关文章

WebClient在多线程、使用代理情况下 socket closed 问题的一个解决办法[htmlunit]

通过 WebClient 的内置浏览器,可以执行页面抓取工作,有时可能需要设置代理,WebClient webClient = new WebClient(BrowserVersion.x);webClient.setProxyConfig(ProxyConfig pc);在单线程情况下,使用这样创建的webClient不会有问题:客户端到代理服务器的连接能够很有次序的建立.关闭. 考虑这样的情况:多个线程并发地访问 WebClient,可能就会报下面的异常: [Thread-7] DEBUG

ARC下的内存管理

1.ARC下单对象内存管理 局部变量释放对象随之被释放 int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [[Person alloc] init]; } // 执行到这一行局部变量p释放 // 由于没有强指针指向对象, 所以对象也释放 return 0; } 清空指针对象随之被释放 int main(int argc, const char * argv[]) { @autoreleasepool

在数据库并发情况下避免插入重复数据的一个解决方法

目前公司的项目中碰到一个情况:需要向一个数据表table1中插入记录,该表的结构类似于下面的定义: 列名  类型 是否允许为空 Id int no Area string no AreaIndex int no Name string no 其中Name的值由Area和AreaIndex拼接而成,形式类似于“Area+AreaIndex”.对于相同的Area,AreaIndex从1开始计数,所以对于Area分别为“AA”,“BB”,“CC”的情况,Name的值类似下面这样: AA001 AA00

Android开发 |常见的内存泄漏问题及解决办法

在Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要再使用了,本该被回收时,而另外一个正在使用的对象持有它的引用从而导致它不能被回收,这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了. 内存泄漏有什么影响呢?它是造成应用程序OOM的主要原因之一.由于Android系统为每个应用程序分配的内存有限,当一个应用中产生的内存泄漏比较多时

STM8S编译时内存溢出错误的解决办法

? 导致COSMIC报告"segment .ubsct overflow"错误的根本原因是内存溢出, 相关原因分析如下: ? 1.变量存储空间结构 ? STM8S105系列CPU的RAM地址范围为0~0x7FF的2K空间,其中默认将高512字节分配给堆栈,剩下0~0x5FF字节为变量存储空间 .在0~0x5FF的空间范围内,低256字节被定义为Zero page,其中包括.bsct,.ubsct,.bit,.share ? 可见, 当segment .ubsct overflow错误出

html页面顶部出现一段空白,检查控制台发现body 下出现&amp;#65279字符,原因及解决办法

html页面顶部出现一段空白,检查控制台发现body 下出现&#65279字符,原因及解决办法 分析: 原来是页面编码时增加了BOM,此页面后端数据主要是PHP语言,对PHP来讲PHP在设计时没有考虑BOM问题,,不会忽略UTF-8编码的文件开头BOM的那三个字符,会把BOM作为该文件开头正文的一部分.由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码.由于在html一开头有这3个字符的存

&#39;java&#39;不是内部或外部命令,另一个解决办法

我知道环境变量,也知道搞系统变量.别给我粘那些教程了,我的java路程是C:\Program Files\Java\jdk1.6.0_05谁弄好了把那三个变量和值发出来.... JAVA_HOME=C:\Program Files\Java\jdk1.6.0_05CLASSPATH=C:\Program Files\Java\jdk1.6.0_05\lb\tools.jar 设定好后开个CMD 运行java --------------------------------------------

windows下mysql忘记root密码的解决办法

今天早上 一朋友说自己的mysql 忘记root密码了 让我帮忙给看看,因为没有接触过mysql 所以从网上找了一下信息经我亲身实践  已经成功!mysql版本是5.1以下是从网上找的信息: 1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd1窗口,切换到mysql的bin目录,运行命令: mysqld --defaults-file="C:\Program Files\MySQL\MySQL Serve

Android项目中gen文件下R文件无法生成的解决办法

帮一个网友解决R文件无法生成的问题,搜集了些材料特整理如下,初学者参考他人代码时极易出现此种问题,一般都是xml文件出错,无法被正确解析. gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自动"编号"(ID)值. 2.gen目录下R文件无法更新/生成的原因 1)res目录下的layout下的xml文件名有错.按照android的命名规范是