@property atomic与nonatomic readonly

2024-06-08 22:18

本文主要是介绍@property atomic与nonatomic readonly,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

@property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法。在xcode4.5以及以后的版本,@synthesize可以省略。

1.atomic与nonatomic

atomic :默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。

nonatomic :如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

2.readwrite与readonly

readwrite :这个属性是默认的情况,会自动为你生成存取器。

readonly :只生成getter不会有setter方法。

readwrite 、 readonly 这两个属性的真正价值,不是提供成员变量访问接口,而是控制成员变量的访问权限。

3.strong与weak

strong :强引用,也是我们通常说的引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。

weak :弱引用,不决定对象的存亡。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。

strong 与 retain 功能相似; weak 与 assign 相似,只是当对象消失后weak会自动把指针变为nil;

4.assign、copy、retain

assign :默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。一般用来处理基本数据类型。

retain :释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容。

copy :与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1.为了减少对上下文的依赖而引入的机 制。我理解为内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1。对copy属性要特别注意:被定义有copy属性的对象必须要 符合NSCopying协议,必须实现- (id)copyWithZone:(NSZone *)zone方法。

也可以直接使用:

    使用 assign : 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)

    使用 copy : 对NSString

    使用 retain : 对其他NSObject和其子类

这篇关于@property atomic与nonatomic readonly的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso

Android 属性动画(Property Animation)

本文是学习以下三位大神之后,整理的学习笔记,彩蛋在编号6          http://blog.csdn.net/lmj623565791/article/details/38067475          http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html          http://www.tu

Android Property Animation属性动画

本文内容摘自《疯狂Android讲义 第三版-李刚著作》

【python】 @property属性详解

【python】 @property属性详解 一文搞懂python中常用的装饰器(@classmethod、@property、@staticmethod、@abstractmethod…)

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API import { defineStore } from 'pinia'   export const useCommonStore = defineStore('pack-store', {state: (): State => ({wwInfo: {},globalData: {},timerLoc

Selenium 调用 JavaScript 操作带有 readonly 属性 的日期控件

'''<input class="index_start" readonly="" placeholder="开始日期" size="12" autocomplete="off" type="text" value=""><input class="index_end" readonly="" placeholder="结束日期" size="12" autocomplete="off" ty

redis被攻击redis READONLY You can‘t write against a read only slave.

redis 日志路径 /var/log/redis 拿下来后发现有这种错误 Operation now in progress 可能是网络断开导致, 查找redis whereis redis 修改 vim /etc/redis.conf 大概在300行 下面代码yes改no slave-read-only no 重启redis sudo systemctl restart

C++ 原子变量atomic variable

原子变量 原子变量(atomic variable)是 C++11 引入的一种同步机制,用于在多线程环境中进行无锁的、线程安全的操作。原子变量的操作是不可分割的,即在执行过程中不会被其他线程中断,从而避免了数据竞争和不一致的问题。原子变量位于 头文件中。 基本概念 原子性 原子性:一个操作是原子的,意味着它在执行过程中不会被其他线程中断。原子操作要么完全执行,要么完全不执行,不存在部分执行

property 的成员属性

1、assign 范围:对基础数据类型(NSInteger 和 CGFloat) 和 C数据类型(int、float) 使用:简单赋值,不更改索引计数 2、copy(内容拷贝) 范围:对NSString、NSNumber 使用:拷贝对象,释放旧对象,开辟新的内存空间,并将索引计数设为1 深复制:copy的set方法,就是深复制 3、retain(指针拷贝) 范围:对其他NSObje