【IOS】oc中property属性值详解

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:读写属性允许属性的读取和修改。这是属性的默认行为,可以在属性声明中省略。
相关推荐
I烟雨云渊T3 小时前
iOS即时通信的技术要点
ios
鸿蒙布道师6 小时前
鸿蒙NEXT开发动画案例5
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
WDeLiang11 小时前
Flutter - UIKit开发相关指南 - 导航
flutter·ios·dart
文件夹__iOS13 小时前
深入浅出 iOS 对象模型:isa 指针 与 Swift Metadata
ios·swift
*拯1 天前
Uniapp Android/IOS 获取手机通讯录
android·ios·uni-app
天天打码1 天前
Lynx-字节跳动跨平台框架多端兼容Android, iOS, Web 原生渲染
android·前端·javascript·ios
lilili啊啊啊1 天前
iOS safari和android chrome开启网页调试与检查器的方法
android·ios·safari
名字不要太长 像我这样就好2 天前
【iOS】源码阅读(二)——NSObject的alloc源码
开发语言·macos·ios·objective-c
I烟雨云渊T2 天前
iOS实名认证模块的具体实现过程(swift)
ios·cocoa·swift
小鹿撞出了脑震荡2 天前
汇编学习——iOS开发对arm64汇编的初步了解
汇编·学习·ios