当前位置:首页 > 移动端开发 > 正文内容

iOS开发-特点的内存办理

邻居的猫1个月前 (12-09)移动端开发256

Objective-C中,类的实例变量(instance variables)和特点(properties)是两种不同的概念,其间特点的内存办理就较为杂乱。Objective-C 供给了多种特点修饰符,用于办理目标的内存。这些修饰符用于操控目标的生命周期和内存办理行为。

以下是一些常见的特点修饰符及其内存办理行为的详细介绍:

1. strong

  • 适用目标:一般用于目标类型(如 NSObject 及其子类)。
  • 内存办理strong 特点会对目标进行强引证计数。当一个目标被赋值给一个 strong 特点时,该目标的引证计数会添加 1。当这个特点被设置为 nil 或目标被开释时,引证计数会削减 1。
  • 生命周期:只需有一个 strong 引证指向目标,该目标就不会被开释。

示例

@property (nonatomic, strong) NSString *name;

在这个示例中,name 特点是一个 strong 引证,这意味着只需 name 特点指向的目标存在,引证计数就会添加,保证目标不会被开释。

2. weak

  • 适用目标:一般用于目标类型,特别是在防止循环引证时。
  • 内存办理weak 特点不会对目标进行强引证计数。当目标被开释时,weak 特点会主动设置为 nil,防止悬挂指针问题。
  • 生命周期weak 引证不会延伸目标的生命周期。

示例

@property (nonatomic, weak) id<SomeDelegate> delegate;

在这个示例中,delegate 特点是一个 weak 引证,这意味着当 delegate 目标被开释时,delegate 特点会主动设置为 nil

3. assign

  • 适用目标:一般用于根本数据类型(如 intfloatBOOL)和非目标类型(如 NSIntegerCGFloat)。
  • 内存办理assign 特点不会对目标进行引证计数办理。它仅仅简略地赋值,不会添加或削减引证计数。
  • 生命周期:假如 assign 特点指向一个目标,当该目标被开释时,assign 特点不会主动设置为 nil,可能会导致悬挂指针(dangling pointer)问题。

示例

@property (nonatomic, assign) NSInteger age;

在这个示例中,age 特点是一个 assign 引证,这意味着它仅仅简略地存储一个整数值,不触及引证计数办理。

4. copy

  • 适用目标:一般用于需求不可变副本的目标类型(如 NSStringNSArrayNSDictionary)。
  • 内存办理copy 特点会对目标进行浅仿制或深仿制,详细取决于目标的完成。当一个目标被赋值给一个 copy 特点时,会创立一个新的副本,并将其赋值给特点。
  • 生命周期copy 引证会创立一个新的目标副本,保证特点持有的目标是独立的。

示例

@property (nonatomic, copy) NSString *name;

在这个示例中,name 特点是一个 copy 引证,这意味着当一个目标被赋值给 name 特点时,会创立一个新的副本,并将其赋值给 name 特点。

5. unsafe_unretained

  • 适用目标:一般用于目标类型,但不引荐运用。
  • 内存办理unsafe_unretained 特点不会对目标进行强引证计数。当目标被开释时,unsafe_unretained 特点不会主动设置为 nil,可能会导致悬挂指针问题。
  • 生命周期unsafe_unretained 引证不会延伸目标的生命周期。

示例

@property (nonatomic, unsafe_unretained) id delegate;

在这个示例中,delegate 特点是一个 unsafe_unretained 引证,这意味着当 delegate 目标被开释时,delegate 特点不会主动设置为 nil,可能会导致悬挂指针问题。

总结

  • strong:用于目标类型,添加引证计数,保证目标不会被开释。
  • weak:用于目标类型,不添加引证计数,当目标被开释时,特点主动设置为 nil
  • assign:用于根本数据类型和非目标类型,不触及引证计数办理。
  • copy:用于需求不可变副本的目标类型,创立目标的副本。
  • unsafe_unretained:用于目标类型,但不引荐运用,不添加引证计数,当目标被开释时,特点不会主动设置为 nil

了解这些特点修饰符的差异才干更好地办理内存,防止内存走漏和悬挂指针问题。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=479

分享给朋友:

“iOS开发-特点的内存办理” 的相关文章

小程序完成微信 【我的】界面

小程序完成微信 【我的】界面

小程序完成仿微信 【我的】界面 一、简介 小程序完成仿微信 【我的】界面 选用 uni-app 完成,能够适用微信小程序、其他各种小程序以及 APP、Web等多个渠道 详细完成过程如下: 下载开发者东西 HbuilderX 进入 【Dcloud 插件商场】 查找 【小程序完成仿微信 【我的】界面】,...

鸿蒙IDE,开发者的得力助手

鸿蒙IDE,开发者的得力助手

鸿蒙IDE主要有两种类型:DevEco Device Tool和DevEco Studio。以下是它们的主要特点和下载信息: DevEco Device Tool1. 功能特点: 一站式集成开发环境:支持多芯片、远程一站式开发、HDF驱动管理等特性。 智能硬件设备开发:适用于Harmon...

帝临鸿蒙女主角,揭开女主角尹染墨红尘的神秘面纱

《帝临鸿蒙》这部小说中共有15个女主角,她们分别是:1. 帝雪寒烟(仙然)2. 星眸3. 月仙4. 月颜5. 练倾城6. 梦华胥7. 雨情8. 倾世梦9. 星灵儿10. 雨听音(妙音)11. 紫悦心12. 霓裳13. 冷幽幽14. 风语仙15. 水千雪。帝临鸿蒙:揭开女主角尹染墨红尘的神秘面纱在众多...

重生混沌之鸿蒙大道,重生混沌之鸿蒙大道笔趣阁

重生混沌之鸿蒙大道,重生混沌之鸿蒙大道笔趣阁

《重生混沌之鸿蒙大道》是一本由莳空管理大神创作的小说,目前小说处于连载状态。故事主要讲述了仙帝顶峰的李元,他凭借前无古人的修炼速度,一万八千年从一个凡人修炼至仙帝顶峰,并引出了从未出现过的神劫。李元最终被最后一道劫雷化为飞灰。当他醒来时,发现自己来到了混沌未生、天道未出的无之世界。洪荒世界因他的到来...

小米手机稳定版怎么刷成开发版,轻松体验最新功能与优化

小米手机稳定版怎么刷成开发版,轻松体验最新功能与优化

将小米手机从稳定版刷成开发版需要一定的操作步骤和注意事项。以下是一个基本的指南,但请注意,刷机有风险,操作不当可能会导致手机变砖。建议在进行任何操作之前,确保备份好重要数据,并遵循官方指南。1. 解锁Bootloader: 访问小米官网解锁页面,按照官方指引申请解锁权限。 下载并安装小米...

鸿蒙主题,引领未来智能生态的先锋力量

鸿蒙主题,引领未来智能生态的先锋力量

1. Theme Studio: 描述:Theme Studio是一款智能高效的主题开发工具,支持可视化的主题制作方式,提供实时预览、一处修改全局同步、主题规范校验、动态锁屏等功能。适用于HarmonyOS系统的主题设计。 。2. NEXT主题: 描述:NEXT主题包括字体、图标、...