zoukankan      html  css  js  c++  java
  • __weak&__block&__unsafe__unretain

    __block修饰的变量是可以在blocks中共享block外的父类中的变量。这样,即使父类已经超出生存周期,只要任何父类的__block修饰的变量存在于任何一个没有销毁的block块中,那么这个变量就是有效的,不会出现BAD_access错误。多个block块在一个给定的作用域中可以同时的使用共享内存变量。

    __weak描述的是一个特定的引用类型,它不保证修饰的变量在生命周期。当weak修饰的变量所指向的强引用变量销毁时,weak类型的弱引用变量会被置为nil。

    这两个修饰变量的类型是完全不同的概念,当block中使用__block的变量时,__block变量不会copy一份在block中,而是跟外部使用同一内存变量。

    __weak只是复制了一个指向对象的指针,原指向的变量不会做retain操作。

    如果工程mini sdk require:4.3 or latest,工程同时也启用了ARC,那么建议弱类型的变量使用__weak,它会保证在指向的对象释放的同时,__weak修饰的变量指向nil。

    如果工程mini sdk require:4.3以下,或者工程没有启用ARC,那么这个时候只能使用__block,在这种修饰下,谨记,__block修饰的变量如果已经释放,这个时候__block修饰的变量不会被重置为nil。

    上面就是这两个修饰符的微小差异,确保能够正确理解。

    还有一个跟这两个类似的修饰符,__unsafe_unretained,这个修饰符在ios 4.3以后版本跟__weak基本一致,4.3之前不同。同样的这个变量也是不会被置为nil。

    作者:W.M.steve
    出处:http://www.cnblogs.com/weisteve/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    235. Lowest Common Ancestor of a Binary Search Tree
    234. Palindrome Linked List
    233. Number of Digit One
    232. Implement Queue using Stacks
    231. Power of Two
    230.Kth Smallest Element in a BST
    229. Majority Element II
    228. Summary Ranges
    postgres 数组中获取最后一个元素的值
    excel 拆分单元格并填充上一行的数据
  • 原文地址:https://www.cnblogs.com/weisteve/p/3032948.html
Copyright © 2011-2022 走看看