美文网首页
1.iOS中常用的属性修饰符有哪些?

1.iOS中常用的属性修饰符有哪些?

作者: 马小撂 | 来源:发表于2020-02-22 10:32 被阅读0次
修饰符 描述
nonatomic 非原子性,决定编译器生成的setter、getter 方法是非原子操作,线程不安全
atomic 原子性,保证setter和getter存取的线程安全,默认atomic
readonly 只读性,只生成getter方法
readWrite 可读可写性,生成setter和getter方法,默认使用
assign 赋值特性, setter方法将传入参数直接赋值给实例变量
retain 持有特性,setter将传入参数先保留,在赋值,传入参数retainCount会+1
strong 持有特性,和retain一样,多用于ARC
copy 拷贝特性,需要完全一份新的变量时setter方法将传入对象复制一份,一般用于block不可变的字符串,数组,字典等
weak 弱引用,一般用来修饰delegate
__unsafe_unretain 当对象被释放后,指针依然保存着之前的地址
  • atomic:

设置成员变量的属性时,默认是atomic,提供线程安全的。 添加一些线程锁,防止数据在写入未完成的时候被其他线程读取,造成数据错误,默认使用。

  • nonatomic:

非原子性,线程不安全,在写入的时候其他线程也可以对其进行访问,获取当前的值。优点:提高效率。

  • assign:

对基础数据进行赋值(NSIntegerCGFloat)和C数据类型(int, float,double, char),BOOL类型等。存储在栈中,内存不用我们管理。

  • retain,strong(ARC):

一般用于修饰NSObject和其子类,指向并持有该对象,引用计数会加1。引用计数为0销毁,可以通过将变量强制赋值 nil 来进行销毁。

  • copy:

在赋值是使用传入值的一份拷贝。copy关键字和 strong类似,copy多用于修饰有可变类型的不可变对象上 NSString,NSArray,NSDictionary上。block(用strong也可以)等。

  • __unsafe_unretain:

__unsafe_unretain类似于 weak ,但是当对象被释放后,指针依然保存着之前的地址,被释放后的地址变为 僵尸对象,访问被释放的地址就会出问题,所以说他是不安全的。

  • __weak 和 __unsafe_unretain 的区别?

__unsafe_unretain 在指向的内存地址销毁后,指针本身并不会自动销毁,这也就造成了野指针,之后容易造成 Crash__weak 在指向的内存销毁后,可以将指针变量置为nil,这样更加安全。

  • copy和strong的使用场景:

copy多用于修饰有可变类型的不可变对象上 NSString,NSArray,NSDictionaryblock等,原因:不论是用strong还是copy修饰的对象,其指针指向的地址依然还是原对象的地址,但一般我们想要一个不可变的,所以用copy,而他们的可变类型为什么要用strong修饰呢?如果原字符串是NSMutableString的时候,使用strong只会增加引用计数。但是copy会执行一次深拷贝(self语法会调用setter方法,里面会执行一次copy方法生成新的对象,指针和对象都不是原来的了),会造成不必要的内存浪费。

  • NSMutableArray可以用copy修饰吗?

不可以,因为对这个数组进行了增删改操作,而copy后的数组变成了不可变数组NSArray,没有响应的增删改方法,所以对其进行增删改操作就会报错。


WechatIMG1.png

相关文章

  • 1.iOS中常用的属性修饰符有哪些?

    修饰符描述nonatomic非原子性,决定编译器生成的setter、getter 方法是非原子操作,线程不安全at...

  • 临时仓库

    @property中有哪些属性关键字?/ @property 后面可以有哪些修饰符? nonatomic atom...

  • 18.@property中有哪些属性关键字?/ @propert

    @property中有哪些属性关键字?/ @property 后面可以有哪些修饰符? 属性可以拥有的特质分为四类:...

  • 面试题

    1.@property 后面可以有哪些修饰符?/@property中有哪些属性关键字?属性可以拥有的特质分为四类:...

  • 2018-04-09面试题

    1、property常用的修饰符,常用的属性 atomic/nonatomic、readwrite/ readon...

  • 开发问题笔记(十八)

    目录 1.iOS中各种变量的区别(成员变量、属性变量、局部变量..) 1.iOS中各种变量的区别(成员变量、属性变...

  • ios属性修饰符的使用

    iOS中属性修饰符 ios中的主要属性修饰符包含: copy assign retain strong weak ...

  • iOS中属性修饰符及区别

    iOS中属性修饰符 ios中的主要属性修饰符包含: copy assign retain strong weak ...

  • 关于iOS基本属性修饰符的理解(weak篇)

    属性修饰符,顾名思义就是修饰属性的符号,针对不同的属性和使用场景有不同的属性修饰符作用:1、weak属性修饰符用来...

  • 属性

    很早以前学习属性写的一篇文章 , 竟然还存着 @property 后面可以有哪些修饰符(属性特质)? 原子性(at...

网友评论

      本文标题:1.iOS中常用的属性修饰符有哪些?

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