weak属性需要在dealloc中置nil么?

出题者简介: 孙源(sunnyxx),目前就职于百度

整理者简介:陈奕龙(子循),目前就职于滴滴出行。

转载者:豆电雨(starain)微信:doudianyu

不需要。

在ARC环境无论是强指针还是弱指针都无需在 dealloc 设置为 nil , ARC 会自动帮我们处理

即便是编译器不帮我们做这些,weak也不需要在 dealloc 中置nil:

正如上文的:runtime 如何实现 weak 属性 中提到的:

我们模拟下 weak 的 setter 方法,应该如下:

- (void)setObject:(NSObject *)object
{
    objc_setAssociatedObject(self, "object", object, OBJC_ASSOCIATION_ASSIGN);
    [object cyl_runAtDealloc:^{
        _object = nil;
    }];
}

也即:

在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。

时间: 2024-12-16 11:47:11

weak属性需要在dealloc中置nil么?的相关文章

UINavigationBar的translucent属性在头文件中注释的翻译

先吐槽一下,apple的注释写得挺绕的,一大堆的后置定语. translucent iOS7下具有新的行为. 你可以通过设置这个属性为NO,强制背景为不透明. 如果导航栏的背景图为自定义,其默认值将从背景图的alpha值推断而来, 背景图只要有一个像素的alpha值<1.0,则translucent的值推断为YES. 如果设置translucent为YES,而自定义背景图不透明. 则会给图片加上一个小于1.0的系统预定义的透明度. 如果translucent置为NO,而自定义的背景图为半透明,

readonly,readwrte,@property,nonatomic,assign,retain,copy,strong,weak属性关键字

1.readonly是只读 2.readwrite是读写 [email protected]关键字:设置成员变量的属性(有读/写,赋值assign,retain,copy ,以及对多线程的支持nonatomic). 4.nonatomic非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问. 5.assign简单赋值,不会引起引用计数的变化.适用于基础类型(NSInteger,CGFloat),C语言里的(int,double,f

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

swift中的nil与Objective-C中的nil区别

1.OC中,只有对象才能设置为nil,而swift中除了对象,Int.struct.enum等任何可选类型都可以等于nil 2.OC中,nil是一个指向不存在对象的指针.swift中,nil不是指针,nil是个确定的值,用来表示值缺失. swift中的nil与Objective-C中的nil区别,布布扣,bubuko.com

ASP.NET MVC之表单集合数据自动绑定到对象属性(集合)中

前言 之前没遇到过这个问题,在项目中遇到这个问题时想法挺好,按照流程走下去,结果事与愿违,于是开始探索着解决方案,接下来我们来看看这个问题,早已经明了的童鞋请绕道,此文仅供未遇到的童鞋提供一种解决方案. 话题 首先我们来看看整个问题的出现,介绍一下问题的背景. public class Blog { public string BlogName { get; set; } public string BlogAddress { get; set; } public List<Article>

CSS3新属性:在网站中使用访客电脑里没有安装的字体

CSS的font-family属性使网页可以使用客户电脑里的字体,从而得到多姿多彩的WEB页面,但当客户端没有你想要使用的字体时怎么办呢?我们总不能让每个访问者都去安装一个字体吧?事实上,这是可以的!不过不是访客主动下载的,而是网站开发者帮访客下载安装的,具体怎么实现的,我们还要从字体文件的格式说起.字体格式类型主要有几个大分类:TrueType.Embedded Open Type .OpenType.WOFF .SVG.  TrueType Windows和Mac系统最常用的字体格式,其最大

js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性.(据说和一个对象的attr类似,比如dom对象中) prototype:每个构造函数都有一个prototype对象,这个对象指向该构造函数的原型. 对象自身属性方法和原型中的属性方法的区别: 对象自身的属性和方法只对该对象有效,而原型链中的属性方法对所有实例有效. 例子: function bas

复制对象属性:只复制需要的属性值,目标对象中原来的值不变(反射)

使用反射(性能很差,自测是cglib-beanmap性能的50分之1左右): /** * 复制对象属性:只复制需要的属性值,目标对象中原来的值不变 * 只适用于2个相同对象 * @param from 要复制的对象 * @param to 目标对象 * @throws Exception */ @SuppressWarnings("unchecked") public static void copyPropertiesExclude(Object from, Object to) t

将src非空的属性注入到des中

package lizikj.bigwheel.common.vo.merchandise.util; import java.lang.reflect.Field; import lizikj.bigwheel.common.vo.merchandise.Merchandise; public class ObjUtils { /** * 将src非空的属性注入到des中 * @param des * @param src */ public static void copyPropertys