gpt4 book ai didi

objective-c - 为什么要创建临时对象,将它们设置为变量,然后释放它们?

转载 作者:行者123 更新时间:2023-12-01 17:24:11 25 4
gpt4 key购买 nike

我经常看到类似的东西:

NSArray *tmpArr = [[NSArray alloc] initWithObjects:@"Info", nil];
self.userInfo = tmpArr;
[tmpArr release];

代替:
self.userInfo = [[NSArray alloc] initWithObjects:@"Info", nil];

有谁知道为什么顶级代码示例更受欢迎?它比第二种更正确的内存管理吗?

最佳答案

第二个代码段由于未释放阵列而导致内存泄漏。在大多数情况下,对象类型的属性(在本例中为NSArray)是retaincopy属性,这意味着它们要么增加分配值的引用计数,要么复制整个对象。然后,如果不再需要,则可以(并且应该)释放局部变量。

第二个代码的非泄漏替代方法是使用autorelease:

self.userInfo = [[[NSArray alloc] initWithObjects:@"Info", nil] autorelease];

或者简单地:
self.userInfo = [NSArray arrayWithObjects:@"Info", nil];

关于objective-c - 为什么要创建临时对象,将它们设置为变量,然后释放它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7890114/

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