zoukankan      html  css  js  c++  java
  • atomic,nonatomic

    atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。

            atomic

                    设置成员变量的@property属性时,默认为atomic,提供多线程安全。

                    在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
                            {lock}
                                    if (property != newValue) { 
                                            [property release]; 
                                            property = [newValue retain]; 
                                    }
                            {unlock}
     
        注意:
          手动维护线程锁和atomic的线程安全使用的区别
            atomic 只是对属性setter方法赋值操作语句的加锁保护, 这样可能达不到线程安全的目的,手动维护一个线程锁可以对一些操作进行加锁,比atomic更安全
     

            nonatomic

            禁止多线程,变量保护,提高性能。

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

            指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。

     
     
  • 相关阅读:
    JDBC——java连接操作数据库的步骤
    JVM——编译和运行
    base——运算符的用法
    JVM——类的初始化【转】
    JVM——类加载机制
    base——gc方法与finalize方法的区别
    JVM——垃圾回收机制&&jvm内存分配机制
    JVM——虚拟机的简介【摘录】
    2019-06-12_java.lang.RuntimeException: Serialized class com.taotao.common.pojo.SearchItem must implement java.io.Serializable
    2019-06-12_Python-Break语句
  • 原文地址:https://www.cnblogs.com/W-Kr/p/5197117.html
Copyright © 2011-2022 走看看