240 发简信
IP属地:上海
  • 120
    Autolayout中关于intrinsic content、相关优先级及其应用

    理论 intrinsic content size: 有些控件能通过自己显示的内容计算出需要的Size,这个自动计算出来size就叫该控件的固有内容大小。这个大小是和需要显示...

  • runtime 完整总结

    这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 南峰子老师的博客地址:http://southpeak...

  • iOS成员属性和成员变量的区别

    一、@property 和@synthesizer 在objective-c 1.0中,我们为interface同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机...

  • 120
    深入研究Block捕获外部变量和__block实现原理

    前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能“Blocks”。从那开始,Block就出现在iOS...

  • 非常好的文章;有一点没弄懂,关于对象的捕获和持有(讨论ARC的情况); 源代码如下:
    __Block_byref_block_obj_0 *block_obj = __cself->block_obj; // bound by ref
    id obj = __cself->obj; // bound by copy
    以上,block_obj 是 by ref, obj 是by copy;前者造成引用,而后者只是简单的copy;
    那么两者都被捕获,但是只有被引用的block_obj是会被强引用;而被copy的obj不会被强引用;
    文中下面的陈述也表明了这个观点:

    根据打印出来的结果来看,ARC环境下,Block捕获外部对象变量,是都会copy一份的,地址都不同。只不过带有__block修饰符的变量会被捕获到Block内部持有。
    在ARC环境下,对于声明为__block的外部对象,在block内部会进行retain,以至于在block环境内能安全的引用外部对象,所以才会产生循环引用的问题!

    那么是否说明只有_block修饰的对象才会造成循环引用;
    但是实际上任何被捕获的对象都会造成循环引用;这里怎么理解呢?
    谢谢!

    深入研究Block捕获外部变量和__block实现原理

    前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能“Blocks”。从那开始,Block就出现在iOS...