【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:读写属性允许属性的读取和修改。这是属性的默认行为,可以在属性声明中省略。
相关推荐
张飞签名上架2 小时前
深耕全球市场:App上架iOS与Google Play全流程指南
macos·ios·cocoa·ios上架·上架·谷歌上架
Digitally3 小时前
iPhone 无法向安卓设备发送图片:轻松解决
android·ios·iphone
阿里云云原生4 小时前
RUM 助力 iOS 应用稳定性:从异常捕获到堆栈还原的全流程分析
人工智能·阿里云·ios·云原生·rum
初级代码游戏13 小时前
iOS只剩美工了吗?时间都被遮盖看不清了
ios·界面设计·美工
2501_9159184121 小时前
iOS 开发中证书创建与管理中的常见问题
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张21 小时前
IOScer 开发环境证书包括哪些,证书、描述文件与 App ID 的协同管理实践
android·ios·小程序·https·uni-app·iphone·webview
江东小bug王21 小时前
深入理解 UITabBarController:代理方法与 ViewController 生命周期的执行顺序(含 UINavigationController 场景)
ios
阿里云云原生1 天前
RUM 赋能 iOS App 稳定:从异常体系到监控方案的全方位解析!
ios·云原生
Zfox_1 天前
无缝穿越系统边界:节点小宝4.0如何让我的Mac/iOS像访问本地盘一样操控Windows
windows·macos·ios·节点小宝
Zender Han1 天前
Flutter 图片裁剪插件 image_cropper 最新版介绍与使用教程
android·flutter·ios