我已经通过了Objective-C literals&类方法,但我从Memory的观点来看并不清楚。我很困惑使用哪个版本的代码。我有两段代码&我想从Memory Leak的观点来理解它们之间的区别。
假设“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];
}
}
答案 0 :(得分:2)
假设您没有使用ARC:
答案 1 :(得分:0)
版本1每次都在创建一个字典,第二版正在发布一个自动发布的字典版本。
版本2相当于[NSDictionary dictionaryWithObjectsAndKeys]
方法。
答案 2 :(得分:0)
在alloc
[NSDictionary alloc]initWithObjectsAndKeys:
对象(例如[NSDictionary dictionaryWithObjectsAndKeys]
}获得保留对象时,在手动内存管理中。表示您有责任释放该对象。 [NSDictionary dictionaryWithObjectsAndKeys]
为您提供自动释放对象的位置。您的第二个版本的代码是现代目标c样式创建字典,与{{1}}相同(特别是替换 + [NSDictionary dictionaryWithObjects:forKeys:count:] )。在记忆中,第二个是自动释放。如果您不确定内存管理使用ARC
答案 3 :(得分:0)
您将使用版本1泄漏内存。您正在分配NSDictionary但随后会覆盖其指针(本地tempDict),因此无法释放它。版本2不会泄漏内存,因为NSDictionary对象的创建会创建一个自动释放的对象。 (所有这些假设您使用的是手动保留/释放,而不是ARC。)