zoukankan      html  css  js  c++  java
  • @property(nonatomic,retain)

    @property是一个属性访问声明,扩号内支持以下几个属性:
    1,getter=getterName,setter=setterName,设置setter与getter的方法名
    2,readwrite,readonly,设置可供访问级别
    2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
    3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
    4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
    5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级。注:即无论get/set都会 retain

    @synthesize xxx;  来实现实际代码

    @property (copy, nonatomic) NSString *title;

    什么是assign,copy,retain之间的区别?

    • assign: 简单赋值,不更改索引计数(Reference Counting)。
    • copy: 建立一个索引计数为1的对象,然后释放旧对象
    • retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1

    retain的实际语法为:

    - (void)setName:(NSString *)newName { if (name != newName) { [name release]; name= [newName retain]// name’s retain count has been bumped up by 1 } }

    说了那么麻烦,其实接下来的话最重要:

    ?如果你不懂怎么使用他们,那么就这样 ->

    • 使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
    • 使用copy: 对NSString
    • 使用retain: 对其他NSObject和其子类

    nonatomic关键字:

    atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

  • 相关阅读:
    如何用redis/memcache做Mysql缓存层?
    孤儿进程和僵尸进程总结
    二叉树的遍历(非递归)
    Linux进程分配内存的两种方式--brk() 和mmap()
    Hbase
    cgroup 分析之CPU和内存部分
    十道海量数据处理面试题与十个方法大总结
    快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,即USE方法
    红黑树
    tcp 两个重要窗口:滑动窗口 和 拥塞窗口
  • 原文地址:https://www.cnblogs.com/androidsj/p/3054361.html
Copyright © 2011-2022 走看看