• IOS开发@property 属性类型归纳和介绍


    在编写IOS的代码的时候,会经常声明@property变量,每一个变量后面都会加个括号,里面会放一些属性,例如@property(nonatomic,strong).....我们现在就来归纳一下:

    1.atomic与nonatomic

    • atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题
    • nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

    2.readwrite与readonly(readwritereadonly这两个属性的真正价值,不是提供成员变量访问接口,而是控制成员变量的访问权限)

    • readwrite:这个属性是默认的情况,会自动为你生成存取器。
    • readonly:只生成getter不会有setter方法。

    3.strong与weak(strongretain功能相似;weakassign相似,只是当对象消失后weak会自动把指针变为nil;

    • strong:强引用,也是我们通常说的引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。
    • weak:弱引用,不决定对象的存亡。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。

    4.assign、copy、retain

    • assign:默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。一般用来处理基本数据类型。
    • retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容。
    • copy:与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1.为了减少对上下文的依赖而引入的机 制。我理解为内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1。对copy属性要特别注意:被定义有copy属性的对象必须要 符合NSCopying协议,必须实现- (id)copyWithZone:(NSZone *)zone方法。
    • 也可以直接使用:
    •     使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
          使用copy: 对NSString
          使用retain: 对其他NSObject和其子类
  • 相关阅读:
    Java 反射 Class类
    Java 反射 Class对象
    Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
    Kubernetes 删除 namespace
    Rancher在Catalog中 使用Helm Chart安装应用
    asp.net core + log4net+exceptionles+DI
    Jenkins-Kubernetes-docker-自动发布
    Asp.Net Core 2.0 WebUploader FastDfs 文件上传 分段上传
    Centos7 安装并配置redis
    redis 配置文件详解
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/5231053.html
Copyright © 2020-2023  润新知