美文网首页
OC中assign,weak,strong,retain,cop

OC中assign,weak,strong,retain,cop

作者: 一叶知秋0830 | 来源:发表于2019-12-06 17:36 被阅读0次

OC中用@property声明属性时可以用assign,weak,strong,copy,retain来修饰,这些修饰关键字都与内存管理有关。

assign:用于修饰基本数据类型、枚举、结构体等非OC对象。起始就是简单的赋值,不会影响引用计数。如果将assign修饰的属性强制指向一个OC对象,这并不会引起该对象引用计数的增加,这一点和weak很像。

@property (nonatomic , strong) NSArray *array;
@property (nonatomic , assign) NSInteger count;

// 将count强制指向array,虽然会有警告,但可以正常运行
self.array = [NSArray arrayWithObject:@"123"];
self.count = self.array;

weak:弱引用,比较常用的用来修饰代理属性,这可以避免代理和被代理者之间循环引用。weak修饰的属性指向对象时不会引起对象引用计数的变化,和assign不同的是,当对象销毁后weak修饰的属性会置为nil,防止野指针。

retainstrong:两者作用基本一样都是强引用(MRC时是用retian,现在一般用strong),当其修饰的属性(指针)指向某个对象时,是将该对象的指针拷贝一份,该对象的引用计数+1。只要有强指针指向该对象,该对象就不会被销毁。要注意的是两者在修饰block时效果是不一样的,此时strong等价于copy,而retain等价于assign(block一般应该用copy修饰)。

copy:一般用于NSStringblock类型上,是将整个对象拷贝一份(深拷贝),然后将指针指向新拷贝的对象,新拷贝对象引用计数为1。需要注意的是,当我们声明的属性是一个自定义对象类型时,如果用copy修饰的话,需要自定义对象遵循NSCopying协议并实现copyWithZone方法。

相关文章

网友评论

      本文标题:OC中assign,weak,strong,retain,cop

      本文链接:https://www.haomeiwen.com/subject/ihzowctx.html