原子属性

nonatomic 非原子属性

atomic  原子属性

他们本身就是个加锁。

原子属性就是不可分割的属性   原子属性实现:单(线程)写,多(线程)读。

因为写的安全级别要求更高,读的安全级别要求低一些,可以多读几次保证数据正确性。

在atomic情况下,只要重写了set方法,getter也得重写,

原子属性内部使用的自旋锁。

自旋锁和互斥锁的共同点和不同点?

共同点:都可以锁定一段代码,同一时间内只有一条线程能够执行这段锁定的代码

不同点:互斥锁在锁定的时候,其他线程会睡眠(sleep)等待条件满足,在唤醒。

自旋锁,在锁定的时候其他线程会做死循环,一直等待条件满足,一旦条件满足,立马执行,少了唤醒的过程。

线程安全的概念:

就是多个线程同时执行的时候,能够保证资源信息的准确性。

UI线程----主线程

**UIKit中绝大部分的类,都不是线程安全的。

怎么解决这个线程不安全的问题?

苹果官方约定,所有程序的更新UI 都在主线程进行。就不会出现多个线程同时改变同一个资源。

**在主线程更新UI 有什么好处?

1.只在主线程更新UI就不会出现多个线程同时改变同一个UI控件的情况。

2.主线程的优先级时最高的。也就意味着UI的更新优先级也高。会让用户感觉到很流畅。

时间: 2024-10-10 05:19:32

原子属性的相关文章

原子属性与非原子属性,互斥锁与自旋锁介绍

nonatomic 非原子属性 非线程安全,适合内存小的移动设备(手机,平板...) atomic 原子属性(线程安全,但需要消耗大量资源)针对多线程设计的,为默认值,保证同一时间只有一个线程能够写入;本身就是一把自旋锁;单写多读,单个线程写入,多个线程读取 注意:当重写属性的get与set方法时需要在@implementation后添加:@synthesiae 属性名 = _属性名; 互斥锁与自旋锁对比 互斥锁:如果发现其他线程正在执行锁定代码,线程会进入休眠(就绪状态),等其他线程时间到打开

原子和非原子属性

一.原子和非原子属性 1. OC在定义属性时有nonatomic和atomic两种选择: atomic:原子属性,为setter方法加锁(默认就是atomic): nonatomic:非原子属性,不会为setter方法加锁. 2. nonatomic和atomic的对比 atomic:线程安全,需要消耗大量的资源: nonatomic:非线程安全,适合内存小的移动设备. 3. iOS开发的建议 所有属性都声明为nonatomic. 尽量避免多线程抢夺同一块资源. 尽量将加锁.资源抢夺的业务逻辑交

iOS核心笔记——多线程-原子/非原子属性

1.原子属性: 1-1.nonatomic与atomic: nonatomic : 非原子属性: atomic : 原子属性: 线程安全的,针对多线程设计的属性修饰符,是默认值. 保证同一时间只有一个线程能够写入,但是同一个时间多个线程都可以读取: 单写多读 : 单个线程写入write,多个线程可以读取read: atomic 本身就有一把锁,自旋锁. 1-2.nonatomic和atomic对比: nonatomic : 非线程安全,适合内存小的移动设备: atomic : 线程安全,需要消耗

oc关于非原子属性

OC在定义属性时有nonatomic和atomic两种选择 atomic:原子属性,为setter方法加锁(默认就是atomic) nonatomic:非原子属性,不会为setter方法加锁 atomic加锁原理 1 @property (assign, atomic) int age; 2 3 - (void)setAge:(int)age 4 { 5 6 @synchronized(self) { 7 _age = age; 8 } 9 } 原子和非原子属性的选择 nonatomic和ato

如何修改3D模型的原子属性

Chem3D是专门用于绘制化学三维模型和进行计算化学数据的ChemOffice组件,在三维模型中每个原子都有众多属性,比如原子类型.原子符号.原子编号以及原子颜色等等.掌握Chem 3D模型的原子属性修改方法有助于绘制者创建出具有自己特色的三维立体模型,下面就跟着小编一起来学这篇ChemDraw绘制技巧吧! Chem3D模型的原子属性的修改方法 在修改Chem3D模型的某个原子属性之前要在这个原子上右击,跟着会弹出右击菜单,所有修改属性的操作全部都在右击菜单中.这里需要注意的是选中的原子会以黄色

使用自旋锁和互斥锁实现的原子属性的性能对比

代码: #import "ViewController.h" extern uint64_t dispatch_benchmark(size_t count, void (^block)(void)); @interface ViewController () // 原子属性 - 互斥锁实现 @property (strong, nonatomic) NSObject *obj1; // 原子属性 - 自旋锁实现 @property (strong, atomic) NSObject

类的成员变量和属性描述

0x 01 .类的属性 property 类的属性即是通过@property声明的属性.属性是类型为objc_property的一个结构体.该结构体封装了属性的信息 比如属性的名字,属性的类型,属性的可读写,非原子/原子属性等. 1).获取一个类的属性列表方法:OBJC_EXPORT objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)入参是一个类的class对象,一个是用于统计属性数量的整形数的地址

对Objective-C相关的类、方法、属性、成员变量介绍

类的定义@interface FirstClass :NSObject@end//@interface表示声明的是一个类,“:”表示继承关系,@end类的结束类的实现@implementation FirstClass方法的声明+(void)print;-(id)init;//"+"表示声明的是一个类方法,由雷鸣调用//“-”表示声明的时实例方法,必须由类的对象来调用//不带参数的方法在调用时,会使用隐藏的self参数来访问实例变量的属性.声明带参数的方法:+(void)initWit

属性 与成员变量的 区别与联系 及属性修饰词理解

成员变量和属性的区别与联系在于: 成员变量是一个“内”概念,反映的是类的结构构成.属性是一个“外”概念,反映的是类的逻辑意义. 成员变量没有读写权限控制,而属性可以指定为只读或只写,或可读可写. 成员变量不对读出作任何后处理,不对写入作任何预处理,而属性则可以. public成员变量可以视为一个可读可写.没有任何预处理或后处理的属性. 而private成员变量由于外部不可见,与属性“外”的特性不相符,所以不能视为属性. 虽然大多数情况下,属性会由某个或某些成员变量来表示,但属性与成员变量没有必然