【IOS】oc中property属性值详解

news/2024/7/20 2:33:39 标签: ios, objective-c

1. atomic与nonatomic

  • atomic:原子属性确保属性的读取和写入操作在多线程环境中是线程安全的。这意味着,当一个线程正在读取或写入属性时,其他线程不能同时访问该属性。虽然这提供了线程安全性,但它也引入了性能开销,因为每次访问都需要加锁和解锁。
  • nonatomic:非原子属性不提供线程安全性。多个线程可以同时访问和修改同一属性,这可能导致数据不一致。然而,非原子属性通常具有更高的性能,因为它们不需要加锁。

2. assign、retain与copy

  • assign:该属性通常用于基本数据类型(如int、float、BOOL等)和C指针。对于OC对象类型,assign只是简单地将指针值赋给属性,不会增加对象的引用计数。这意味着,如果对象被释放,而指针仍然保留,则会出现悬挂指针。
  • retain:该属性用于OC对象类型。当属性设置为一个对象时,该对象的引用计数会增加。当属性设置为nil或另一个对象时,之前的对象的引用计数会减少。这有助于防止内存泄漏,但可能会增加内存使用。
  • copy:该属性也用于OC对象类型,特别是可变对象(如NSMutableArray、NSMutableString等)。当属性设置为一个对象时,会创建一个该对象的不可变副本,并将属性设置为该副本。这有助于防止外部对象修改属性的值,但可能会增加内存使用。

3. strong与weak

  • strong:强引用表示属性对其拥有的对象具有所有权。当属性设置为一个对象时,对象的引用计数会增加。当属性被释放或设置为另一个对象时,之前的对象的引用计数会减少。如果引用计数降为0,对象将被释放。
  • weak:弱引用表示属性对其拥有的对象没有所有权。当对象被释放时,属性的值会自动设置为nil。这有助于防止循环引用,但需要注意的是,如果对象被释放,弱引用属性将不再有效。

4. readonly与readwrite

  • readonly:只读属性意味着属性只能被读取,不能被修改。这可以通过在属性声明中添加readonly关键字来实现。只读属性通常用于表示对象的常量状态。
  • readwrite:读写属性允许属性的读取和修改。这是属性的默认行为,可以在属性声明中省略。

http://www.niftyadmin.cn/n/5385169.html

相关文章

如何选择适合你的阿里云服务器?

阿里云服务器配置怎么选择?根据实际使用场景选择,个人搭建网站可选2核2G配置,访问量大的话可以选择2核4G配置,企业部署Java、Python等开发环境可以选择2核8G配置,企业数据库、Web应用或APP可以选择4核8G配置或4核16G配…

Aster实现一台电脑当两台使——副屏搭配键鼠

前言:笔者每年回家,都面临着想要和小伙伴一起玩游戏,但小伙伴没有电脑/只有低配电脑的问题。与此同时,笔者自身的电脑是高配置的电脑,因此笔者想到,能否在自己的电脑上运行游戏,在小伙伴的电脑上…

centerOS docker搭建flowable,流程引擎

1、准备一个mysql数据库,库名为flowable 2、mysql驱动下载,下载地址为: https://mvnrepository.com/artifact/mysql/mysql-connector-java此处使用的是8.0.22版本的驱动,且数据库必须使用版本8,否则第二次启动报错 3、…

使用JavaVisualVM排查FullGC问题

1.工具准备 在这里使用 jdk/bin 目录下的 jvisualvm.exe,是自带工具。 2.工具使用 将下载到本地的dump 文件导入工具中,会展示各个类的实例数占比,大小占比。 3.问题排查 前期准备 在分析dump文件之前,我们可以先观察应用中接…

2024年华为OD机试真题-数的分解-Python-OD统一考试(C卷)

题目描述: 给定一个正整数n,如果能够分解为m(m > 1)个连续正整数之和,请输出所有分解中,m最小的分解。 如果给定整数无法分解为连续正整数,则输出字符串"N"。 输入描述: 输入数据为一整数,范围为(1, 2^30] 输出描述: 比如输入为: 21 输出: 21=10+11 补…

nacos用作注册中心

nacos除了用作配置中心,即可以将配置信息由配置文件转移到nacos上,更便于修改和维护外,更重要的,是用作微服务的注册中心。没有这类中间件,微服务玩不转。 微服务架构也者,就是有好多好多的微服务&#xf…

当服务器磁盘空间报警时怎么处理?

1、df -hT 查看磁盘使用情况 [rootapplication01 ~]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 44G 8.3G 36G 19% / devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev tmpfs …

C语言------------指针笔试题目深度剖析

1. #include <stdio.h> int main() { int a[5] { 1, 2, 3, 4, 5 }; int *ptr (int *)(&a 1); printf( "%d,%d", *(a 1), *(ptr - 1)); return 0; } 首先要明白这个强制类型转换&#xff0c;即int(*)[5]类型转换成int(*)类型&#xff1b; *&#xff…