ARC了解

本文详细介绍了iOS自iOS5开始引入的自动引用计数(ARC)特性。ARC通过编译器自动管理内存,消除了手动管理内存的繁琐,并几乎能避免内存泄漏问题。文中还探讨了ARC的实现原理、注意事项及使用细节。

ARC是自iOS5开始加的新特性, iOS程序猿的福音

ARC的全称是AutomaticReferenceCounting(自动引用计数)

ARC的实现细节

  • 编译器会自动在适当的地方插入适当的retainreleaseautorelease语句
  • 也就是说, 编译器会自动生成内存管理的代码,不用程序猿手动编写

如果是手动管理内存, 可以简称MRC (ManualReferenceCounting)

ARC与其他语言的垃圾回收机制不同。ARC:编译器特性;垃圾回收运行时特性

ARC的注意点

  • ARC是编译器特性,而不是运行时特性
  • ARC不是其它语言中的垃圾回收, 有着本质区别

ARC的优点

  • 完全消除了手动管理内存的烦琐,让程序猿更加专注于app的业务
  • 基本上能够避免内存泄露
  • 有时还能更加快速,因为编译器还可以执行某些优化

ARC的判断原则

  • 只要还有一个强指针变量指向对象,对象就会保持在内存
  • **注意:当使用ARC的时候,忘记引用计数器,判断标准变了。

强指针

  • 默认所有指针变量都是指针
  • __strong修饰的指针

弱指针

  • __weak修饰的指针
  • // 1.案例

            __strong Person *p1 = [[Person alloc] init];

           

            __strong Person *p2 = p1;

           

            p1 = nil;

            // insert code here...

            NSLog(@"Hello, World!");

            p2 = nil;

           

            NSLog(@"hello");

    // 2.案例

            __strong Person *p1 = [[Person alloc] init];

           

            __weak Person *p2 = p1;

           

            p1 = nil;

            // insert code here...

            NSLog(@"Hello, World!");

            p2 = nil;

           

            NSLog(@"hello");

    // 3.案例:PersonDog属性

            // 使用ARC后,可以重写dealloc方法,但是不能在里面调用[super dealloc]了。

            Person *p1 = [[Person alloc] init];

           

            Dog *dog = [[Dog alloc] init];

           

            p1.dog = dog;

           

            dog = nil;

            // insert code here...

            NSLog(@"Hello, World!");

            p1 = nil;

           

            NSLog(@"hello");
  • ARC使用细节
  • 不能调用releaseretainautoreleaseretainCount

    可以重写dealloc,但是不能调用[superdealloc]

    ARC中的@property

    • strong : 用于OC对象, 相当于MRC中的retain
    • weak : 用于OC对象, 相当于MRC中的assign
    • assign :用于基本数据类型, MRC中的assign一样
    • copy : 一般用于NSString, MRC中的copy一样
    • ARC情况下解决”循环retain”的问题:@property一边用strong,一边用weak

(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)与多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参数设置,适用于工程设计、参数反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性与实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法和数值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次数;②在无法解析求导或函数高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度与效率;④应用于工程设计、能源系统调度、智能制造等需参数优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤与NSGA-II的集成方式,建议自行调整测试函数或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值