iOS 简单的 block & 内存泄漏问题

注意 : block 用 copy 引用 
 
typedef int (^MyBlock)(int, int);

void play()

{

NSLog(@"play mp3");

}

int main(int argc, const char * argv[])

{

@autoreleasepool {

MyBlock sumBlock =  ^(int a, int b){

return  a + b;

};

MyBlock minusBlock =  ^(int a, int b){

return  a - b;

};

int r = minusBlock(10, 2);

NSLog(@"%d", r);

}

return 0;

}
——————————————————————————————

内存泄漏问题:

block 里面引用 self ,而self又强指针指着block。使self 不能被销毁。
解决方法:
__weak typeof(self) selfVc = self;
定义一个self的替身并用ruo指针引用着
————————————————————————————————

注意:在定义Block时,会在Block中建?立

当前局部变量内容的副本(拷贝)后续再对该变量的数值进?行修改, 重点

不会影响Block中的数值

如果需要在block中保持局部变量的 
● 如果要修改Block之外的局部变量,需要使?用__block关键字

__block BOOL flag = NO;

————————————————

时间: 2024-10-12 16:48:11

iOS 简单的 block & 内存泄漏问题的相关文章

LeakCanary:简单粗暴的内存泄漏检測工具

差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内存泄漏是指因为疏忽或者错误造成程序未能释放已经不再使用的内存,内存泄漏不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误失去了对于这段内存的控制.因而造成内存的浪费. 内存泄漏和内存溢出是两码事,不要混淆,内存溢出通俗的讲就是内存不够用,如今的仅仅能手机内存越来越大,内存溢出的情况不

LeakCanary:简单粗暴的内存泄漏检测工具

几乎每个程序员在开发的过程中都会遇到内存泄漏,那么我们如何检测到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检测内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内存泄漏是指由于疏忽或者错误造成程序未能释放已经不再使用的内存,内存泄漏不是指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误失去了对于这段内存的控制,因而造成内存的浪费. 内存泄漏和内存溢出是两码事,不要混淆,内存溢出通俗的讲就是内存不够用,现在的只能手机内存越来越大,内存溢出的情况不是很多

iOS开发 如何检查内存泄漏

本文转载至 http://mobile.51cto.com/iphone-423391.htm 在开发的时候内存泄漏是不可避免的,但是也是我们需要尽量减少的,因为内存泄漏可能会很大程度的影响程序的稳定性!!!最近一阵在疯狂的查询内存泄漏问题,总结有几种方法供大家参考. AD:2014WOT全球软件技术峰会北京站 课程视频发布 在开发的时候内存泄漏是不可避免的,但是也是我们需要尽量减少的,因为内存泄漏可能会很大程度的影响程序的稳定性!!!最近一阵在疯狂的查询内存泄漏问题,总结有几种方法供大家参考.

iOS 面试题之内存泄漏

这段代码有什么问题,如何修改 for (int i = 0; i < someLargeNumber; i++) { NSString *string = @"Abc"; string = [string lowercaseString]; string = [string stringByAppendingString:@"xyz"]; NSLog(@"%@", string); } ===========================

关于iOS上使用WWW引起的内存泄漏的临时解决方案

原地址:http://www.unity蛮牛.com/thread-16493-1-1.html 目前,在的4.3.3.和4.3.4版本中存在一个iOS平台上的内存泄漏问题,即当使用WWW来下载和加载Assetbundle文件时,如果按照以下方式来进行,则会造成Assetbundle卸载后内存不能完全释放的情况. 对此,Unity官方已经就该问题进行了修复,并在下一个版本中进行更新.但对于目前仍在使用4.3.3和4.3.4两个版本上进行开发的项目,建议使用以下的临时解决方案,具体步骤如下: 目前

Java内存泄漏简单说明

Java语言的一个关键的优势就是它的内存管理机制.你只管创建对象,Java的垃圾回收器帮你分配以及回收内存.然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的. 下面就解释下什么是内存泄漏,它为什么会发生,以及我们如何阻止它的发生. 1. 什么是内存泄漏? 内存泄漏的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 要想理解这个定义,我们需要先了解一下对象在内存中的状态.下面的这张图就解释了什么是无用对象以及什么是未被引用对象. 上面

VS环境中进行内存泄漏的检测

根据MSDN中的介绍,亲测整理. 本篇比较长,如不愿花费太多时间,可只看第一段和第四段,甚至只看第四段. 内存泄漏,即未能正确释放以前分配的内存,是 C/C++ 应用程序中最难以捉摸也最难以检测到的 Bug 之一.借助 Visual Studio 调试器和 C 运行时 (CRT) 库,可以检测和识别内存泄漏.检测内存泄漏的主要工具是调试器和 C 运行库 (CRT) 调试堆函数. 简单的使用 要调用CRT调试堆函数,需包含头文件<crtdbg.h>. 在程序的退出点之前调用函数 _CrtDump

.NET 常见内存泄漏

简介 以前认为,.NET程序内存都是托管的,如果不是调用非托管资源,应该不会存在内存泄漏的问题,但是,最近两天对归档程序内存使用分析,发现,事情不是想象的那么简单. .NET内存泄漏,更准确的说应该是对象超过生命周期而不能被GC回收.本文列举了几种可能导致内存泄漏的情形,并提供示例代码,及解决方案,希望对大家有所帮助. 所举的例子都是经过自己极端简化过的,只是为了说明观点,具体项目中遇到的情形会复杂很多,需要具体分析. 事件注册后未解除注册 示例代码 程序运行时,内存使用情况如图: 原因分析 示

iOS - 内存管理之超级大坑内存泄漏QAQ

??前段时间被分配到查内存泄漏这种大坑,不胜惶恐!!!结果还真的跳进去了,爬了好长一段时间都没爬出来QAQ.每天开着Leaks各种捣鼓爱啪啪,然后看到一大波"神奇"的内存泄露信息,头都大了. ??不过这虽然是个大坑,不过趁着这次机会可以把内存管理知识好好实践了一遍.或许现在大多数的新项目都是ARC的了,然而在一些实际的大项目中,会重用很多诺干年前(其实也就几年前)的代码,QAQ,而这些代码会有很多实现采用的是MRC的方式,所以项目中就经常可以见到混合着ARC和MRC这两种不同内存管理模