gpt4 book ai didi

objective-c - ARC 和非 ARC NSString 初始化

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:11 24 4
gpt4 key购买 nike

最近,我一直在我的 Objective-C/iOS 程序中使用自动引用计数,并且非常喜欢这个功能。

我不明白的一件事是初始化 NSString 的正确方法。我已经看到这种方法用于 ARC 和非 ARC 项目:

NSString *myClassicString = [[NSString alloc] initWithFormat:@"My great non-ARC string!"];

我还发现下面的方法可以用来在ARC中初始化一个NSString,我更喜欢它因为方便:

NSString *myARCString = [NSString stringWithFormat:@"My new simple initialization string!"];

这两者有什么区别吗?有正确的方法吗?哪一个更好?

最佳答案

在 ARC 之前,这两种方法之间存在显着差异。第一个是 alloc init 方法,它产生了一个由调用者拥有的对象——它必须手动释放,否则会发生内存泄漏。另一个,+stringWithFormat: 是一个方便的方法,它产生一个不需要显式释放的自动释放对象。

对于 ARC,这种差异仍然很明显。自动释放的对象仍然堆积,因为自动释放池仅在运行循环的每个循环中被耗尽,即使使用 ARC,所以如果您有一个循环创建大量自动释放的对象(即它们使用 NSString 便利方法或其他),您的峰值内存足迹可能会增加。出于这个原因,使用 -alloc -init 版本更好。除此之外,与 ARC 几乎没有区别。

This answer很好地解释了这里发生的自动释放池的情况,并且 Jon 谈论的概念仍然适用于 ARC 代码,因为 ARC 没有摆脱 -retain-release-autorelease,它只是为您插入那些内存管理代码。

综上所述,您可能不需要担心这两种创建字符串的方法之间的区别。无论哪种方式对您来说感觉更好,代码更简洁易读,都将是更好的方法。

关于objective-c - ARC 和非 ARC NSString 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11553164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com