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和atomic对比

atomic:线程安全,需要消耗大量的资源

nonatomic:非线程安全,适合内存小的移动设备

iOS开发的建议

所有属性都声明为nonatomic

尽量避免多线程抢夺同一块资源

尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减小移动客户端的压力

时间: 2024-08-25 17:26:41

oc关于非原子属性的相关文章

原子和非原子属性

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

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

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

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

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

原子属性

nonatomic 非原子属性 atomic  原子属性 他们本身就是个加锁. 原子属性就是不可分割的属性   原子属性实现:单(线程)写,多(线程)读. 因为写的安全级别要求更高,读的安全级别要求低一些,可以多读几次保证数据正确性. 在atomic情况下,只要重写了set方法,getter也得重写, 原子属性内部使用的自旋锁. 自旋锁和互斥锁的共同点和不同点? 共同点:都可以锁定一段代码,同一时间内只有一条线程能够执行这段锁定的代码 不同点:互斥锁在锁定的时候,其他线程会睡眠(sleep)等待

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

OC基础之-Property(属性)和点语法

学习属性之前回忆一下之前学到的setter方法和getter方法: (1)setter方法的作用:用来为单一的实例变量赋值(只能是一个实例变量,多了的叫做get方法) (2)setter方法的写法标准: - 号方法,  无返回值,   名字以set开头+要设置的变量的实例变量名(首字母需大写):(setter方法有且只有一个参数)+参数的类型(和实例变量的类型相同)+参数名(和实例变量名相同) (3)getter方法的作用:用来获取单一实例变量的值. (4)getter方法的写法标准: - 号方

线程同步基础之使用非依赖属性实现同步

当使用synchronized关键字来保护代码块时,必须把对象引用作为传入参数.通常情况下,使用this关键字来引用执行方法所属的对象,也可以使用其他的对象对其进行引用.一般来说,这些对象就是为这个目的而创建的.例如,在类中有两个非依赖属性,它们被多个线程共享,你必须同步每一个变量的访问,但是同一时刻只允许一个线程访问一个属性变量,其他某个线程访问另一个属性变量. 这里我们演示电影院售票场景.这个范例模拟了有两个屏幕和两个售票处的电影院.一个集票处卖出的一张票,只能用于其中一个屏幕,不能同时用于

Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序

前言 今天在看Android ContentProvider实现的时候,突然想到了Java类在new的过程中,静态域.静态块.非静态域.非静态块.构造函数的执行顺序问题.其实这是一个很经典的问题,非常考察对Java基础知识的掌握程度.很多面试过程中相信也有这样的问题,趁着周末有时间复习一下. 结论 这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的过程中,执行顺序如下: 实现自身的静态属性和静态代码块.(根据代码出现的顺序决定谁先执行) 实现自身的非静态属性和

Java静态属性、静态方法、非静态属性、非静态方法的继承问题简单了解

package com.book.web.controller; /**  * 父类  * @author liweihan  *  */ public class Parent { public String normalStr = "父类非静态属性"; public static String staticStr = "父类静态属性"; public String changeStr = "父类-变量"; public static Stri