想看答案可以直接瞅瞅底下代码.

对于一般的@property修饰的属性我们可以使用__weak转换一下self来修饰

    __weak typeof(self) weakSelf = self;//然后把self.xxx变成weakself.xxx

那么.对于一些没有使用@property修饰的私有属性呢.比如一下这种.

    @interface xxx () {NSString *yyy;}

我们不做任何处理直接在block中使用

    // MARK: 1//Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior//Insert 'self->'self.button.didSelectBlock = ^{yyy = @"123131133";NSLog(@"%@",yyy);};

编译器让我们使用self->去修饰这个属性,
当我们换成self->的时候

    // MARK: 2//Block will be retained by an object strongly retained by the captured objectself.button.didSelectBlock = ^{self->yyy = @"12313123";NSLog(@"%@",self->yyy);};

额,循环引用了.那么我们如果把self替换成weakSelf呢

    // MARK: 3// ERROR//Dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, assign it to strong variable first__weak typeof(self) weakSelf = self;self.button.didSelectBlock = ^{weakSelf->yyy = @"12313123";NSLog(@"%@",weakSelf->yyy);};

好吧,直接报错了.这里需要使用一个strong类型的.
最后,在Block里头使用__strong转一下weakSelf就OK了

    // MARK: 4__weak typeof(self) weakSelf = self;self.button.didSelectBlock = ^{__strong typeof(weakSelf) strongSelf = weakSelf;strongSelf->yyy = @"12313123";NSLog(@"%@",strongSelf->yyy);};

防止iOS中私有属性在block中的循环引用相关推荐

  1. python私有属性怎么定义_Python中私有属性的定义方式

    Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field. 示例代码: class Vector2D(object): ...

  2. java中私有属性能不能被继承?

    java中私有属性能不能被继承? 以前的课堂中,老师讲继承的时候说过:子类可以继承父类中的属性和方法.可是当我们写代码的时候却能出现一些不一样的情况. 其原因在什么地方?之后通过代码的验证发现出现在了 ...

  3. javaScript中私有属性和方法

    javaScript并没有特殊的语法来表示私有.保护.或公共属性和方法,在这一点上与 java或其他语言是不同的,JavaScript中所有对象的成员是公用的: var myobj={ mypop:1 ...

  4. python的实例类方法、修饰器类方法、修饰器保护方法、修饰器静态方法中私有属性的区别和自定义property的读写方法

    class Cla:__count=0def __init__(self,v):self.__value=vCla.__count+=1def show(self):print('普通实例方法访问私有 ...

  5. HTML5中margin属性应用,CSS中margin属性及其使用探究

    本文向大家描述一下CSS中margin属性的用法,主要包括其属性,使用过程中会遇到的问题,以及一些高级应用等内容,相信本文介绍一定会让你有所收获. CSS中margin问题及使用 margin属性为C ...

  6. 【无为则无心Python基础】— 62、Python中私有成员方法(类中行为的封装)

    Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...

  7. IOS小知识点5之内存警告、循环引用、交叉引用

    IOS的内存使用有以下几个等级,最常见的就是OSMemoryNotificationLevelWarning  OSMemoryNotificationLevelUrgent typedef enum ...

  8. 私有方法,私有属性在继承中的应用

    转载于:https://www.cnblogs.com/Smalllv/p/8890132.html

  9. html中display属性含义,css中display是什么意思?

    display是CSS中的一个常用属性,可用于规定元素应该生成的框的类型,在网页开发中经常需要用到.下面本篇文章就来给大家介绍一下CSS display属性,希望对大家有所帮助. display属性规 ...

最新文章

  1. servlet的重定向错误
  2. webpack加载postcss,以及autoprefixer的loader
  3. 设计模式:各个模式间的对比
  4. Python(27)-模块
  5. java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)
  6. matlab线性拟合最大偏差值,algorithm – matlab:线性拟合的最佳点数
  7. 网易严选App感受WEEX 开发
  8. 在河北省搜索打印复印店哪家便宜
  9. 办公软件使用学习笔记:excel第五节。excel表格筛选和排序使用方法总结。
  10. 2021-03-21
  11. 从val_loss,train_loss,test_loss中产生的问题
  12. GTO与OKR工具选择
  13. html 图片 空白,HTML图片标签空白解决方法
  14. 有点厉害!用12万行代码堆出来个蔡徐坤,编译还能通过!
  15. python中的subprocess.Popen()使用详解---以及注意的问题(死锁)
  16. 基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距
  17. 小米平板添加位置服务器,小米平板电脑能定位吗?3种可实现小米平板定位导航的方法介绍_硬件教程...
  18. 超级简单的3D slicer使用教程(一)
  19. 佳能Canon imageRUNNER ADVANCE DX C3725 一体机驱动
  20. 顺丰、圆通、韵达演绎2022年报众生相

热门文章

  1. 数字电路与C语言基础
  2. 2021-BUGKU-做题记录-WEB
  3. 鸿蒙系统笔记本电脑上市,华为:智能手表及笔记本电脑将搭载鸿蒙系统 手机明年上市...
  4. nginx禁用缓存_如何开启或禁用nginx缓存
  5. Java中如何将汉字转化为十六进制的数
  6. c51语言单片机打铃系统设计,毕业论文单片机自动控制打铃系统及设计.doc
  7. 第十六章 Unity 预制件prefab(上)
  8. Outlook提示无法保存该附件。无法创建文件......
  9. 笔记本电脑,充电器一拔立马关机,突然无法用电池怎么办
  10. 武纺淘宝网站项目总结