Objective-C:nonatomic关键字(修饰变量,可以提高访问速率)

2024-01-21 10:18

本文主要是介绍Objective-C:nonatomic关键字(修饰变量,可以提高访问速率),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了防止同一变量被不同的线程在某一时间段同时访问,必须加原子琐来保证某次操作的正确性。关于操作的原子性,我看过大神guancheng的一篇http://www.parallellabs.com/2011/04/09/pthread-mutex-lock-and-thread-safety/,这篇文简单的介绍下原子操作。

       给线程加锁的消耗是比较大的,而我们在IOS中不是经常会多个线程访问一个同一个变量,为了提高效率,我们通常会在属性中这样声明:

@property (nonatomic,copy)NSString *userName;

     有同学可能非常疑惑,这样做到底能提高多少效率呢?不这样做又怎样?好,下面我们来写个Demo。

1.首先我使用上面的声明的userName的声明

[html]  view plain copy
  1. @property (nonatomic,copy)NSString *userName;  
  2. - (void)viewDidLoad  
  3. {  
  4.     uint64_t begin =  mach_absolute_time();  
  5.     self.userName = @"username";  
  6.     uint64_t end   = mach_absolute_time();  
  7.     NSLog(@"end - begin = %llu",end-begin);  
  8. }  

运行下结果是:

2012-07-12 19:57:59.679 NavigationDemo[635:f803] end - begin 1236

2.然后我使用下面的声明

[html]  view plain copy
  1. @property (atomic,copy)NSString *userName;  
  2. - (void)viewDidLoad  
  3. {  
  4.     uint64_t begin =  mach_absolute_time();  
  5.     self.userName = @"username";  
  6.     uint64_t end   = mach_absolute_time();  
  7.     NSLog(@"end - begin = %llu",end-begin);  
  8. }  

运行的结果是:

NavigationDemo[726:f803] end - begin  8330

3.可以明显看出声明为nonatomic能提高好几倍的效率,所以在属性声明的时候,当不会在多线程下操作此成员的时候声明为非原子性能极大的提高效率,希望看完这篇文后更多的同学能使用这个声明。



转自:http://blog.csdn.net/cubepeng/article/details/7735962

这篇关于Objective-C:nonatomic关键字(修饰变量,可以提高访问速率)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629198

相关文章

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De