block的内存管理

  • block的内存默认放在栈中,(开发人员不需要管理block内存),block所引用的对象的retainCount不变;
    Block_copy(block);

  • 对bloc进行了copy操作,block的内存会搬到堆里面,block所引用的对象retainCount+1;
    Block_release(block);

  • 对block进行了release操作之后,block所引用的对象retainCount不变;

  • 1.默认情况下,block的内存是在栈中,它不会对所引用的对象进行任何操作

  • 2.如果对block做一次copy操作,block的内存就会在堆中

    • 2.1 它会对所引用对象做一次retain操作,retainCount+1
      MRC:使用__block修饰所引用的对象,block就不会做retain操作
      ARC:使用__unsafe_unretained或__weak修饰所引用的对象,block就不会做retain操作
    • 2.2 使用assign(nonatomic, assign)修饰block,block的内存放在栈中;
    • 2.3 一般使用copy(nonatomic, copy)修饰block,block的内存放在堆中。
@property (nonatomic, copy) void (^block))();
- (void)dealloc {
Block_release(block);
[super dealloc];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、前言: Block是Objective-C中的一项强大的特性,Block可以看作是OC中对于闭包函数的实现,实...
    Michael_Lee_阅读 9,971评论 2 17
  • 最近发现很多开发者对block的理解并不是很深,很多项目当中使用的时候多多少会有些问题,今天给大家详细讲讲bloc...
    tanyufeng阅读 12,858评论 17 60
  • block封装了一段代码,这段代码可以在任何时候执行。Block可以作为函数参数或者函数的返回值,而其本身又可以带...
    coderJerry01阅读 3,290评论 0 0
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 6,070评论 1 16
  • 又到周五,这个周五的夜晚变得尤其的喧嚣,而我却有点说不上为什么的落寞。 刚才下班回家的路上就看到楼下广场上已经搭建...
    猛虎哥阅读 1,571评论 1 1

友情链接更多精彩内容