gpt4 book ai didi

iphone - 需要了解以下代码在内存泄漏方面的行为差异

转载 作者:行者123 更新时间:2023-11-28 22:26:09 25 4
gpt4 key购买 nike

我已经了解了 Objective-C 文字和类方法,但从内存的角度来看我并不清楚。我很困惑使用哪个版本的代码。我有两段代码,我想从内存泄漏的角度了解它们之间的区别。

假设“returnArray”是要返回的数组

版本 1

if([tempArray count] > 0) {
for(NSDictionary *dict in tempArray) {

NSDictionary *tempDict = [
[NSDictionary alloc]initWithObjectsAndKeys:
[dict objectForKey:@"verifiedEmail"],@"verifiedEmail",
[dict objectForKey:@"identifier"], @"identifier",
nil
];

[returnArray addObject:tempDict];
}
}

版本 2

if([tempArray count] > 0) {
for(NSDictionary *dict in tempArray) {
NSDictionary *tempDict = @{
@"verifiedEmail" : [dict objectForKey:@"verifiedEmail"],
@"identifier" : [dict objectForKey:@"identifier"],
};
[returnArray addObject:tempDict];
}
}

最佳答案

假设您没有使用 ARC:

  • 版本 1,规则规定具有 alloc、new 或 copy 的对象给对象的保留计数为 1。因此您正在创建 tempdict 而不是在将来释放它,这是一个泄漏
  • 版本 2,因为您没有使用上面的任何词,所以您正在创建一个自动释放的对象,该对象进入自动释放池,如果将来没有人获得其所有权,该对象将被释放。在这种特殊情况下,数组将取得所有权。

关于iphone - 需要了解以下代码在内存泄漏方面的行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18909488/

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