这个代码是否正确管理nsnumber?我不确定这个部分的数量不止一次: 顺便说一句,这段代码不起作用,我没有看到maxCount和maxRate外块。通常吗?通常我在代码的其他部分看到它。
maxCount = [NSNumber numberWithInt:[count intValue]];
__block NSNumber *maxCount = nil;
__block NSNumber *maxRate = nil;
// winned must have less rate in same count issues
[rates enumerateKeysAndObjectsWithOptions:NSSortStable usingBlock:^(NSNumber *rateFromRatesList, NSNumber *count, BOOL *stop) {
NSLog (@"%@/%@ have rateFromRatesList:%@, count:%@, maxCount:%@, maxRate:%@",currentDestination.country,currentDestination.specific,rateFromRatesList,count,maxCount,maxRate);
if ([maxCount intValue] <= [count intValue]) {
if ([maxCount intValue] == [count intValue]) {
// we are update destination rate only if we find rate less than maxrate
if ([maxRate doubleValue] > [rateFromRatesList doubleValue]) {
maxCount = [NSNumber numberWithInt:[count intValue]];
maxRate = [NSNumber numberWithDouble:[rateFromRatesList doubleValue]];
}
} else {
// in oother case, just update to max count
maxCount = [NSNumber numberWithInt:[count intValue]];
maxRate = [NSNumber numberWithDouble:[rateFromRatesList doubleValue]];
}
}
}];
这部分代码工作正常(是enumerateusingblock中的错误吗?:
int maxCount = 0;
double maxRate = 0;
// winned must have less rate in same count issues
//[rates enumerateKeysAndObjectsUsingBlock:^(NSNumber *rateFromRatesList, NSNumber *count, BOOL *stop) {
for (NSNumber *rateFromRatesList in [rates allKeys]) {
NSNumber *count = [rates objectForKey:rateFromRatesList];
NSLog (@"%@/%@ have rateFromRatesList:%@, count:%@, maxCount:%@, maxRate:%@",currentDestination.country,currentDestination.specific,rateFromRatesList,count,[NSNumber numberWithInt:maxCount],[NSNumber numberWithDouble:maxRate]);
if (maxCount <= [count intValue]) {
if (maxCount == [count intValue]) {
// we are update destination rate only if we find rate less than maxrate
if (maxRate > [rateFromRatesList doubleValue]) {
maxCount = [count intValue];
maxRate = [rateFromRatesList doubleValue];
}
} else {
// in oother case, just update to max count
maxCount = [count intValue];
maxRate = [rateFromRatesList doubleValue];
}
}
};
答案 0 :(得分:0)
在:
maxCount = [NSNumber numberWithInt:[count intValue]];
您的NSNumber是自动释放的,并会在稍后的某个时间点自动释放。因此,当您再次分配给maxCount
时,您没有任何泄漏。
maxCount = [NSNumber numberWithInt:[count intValue]];
如果您使用[[... alloc] initWith ...],这会有所不同,因为在这种情况下,您获得的对象将被保留,您将负责释放它们,然后再次分配给指向它们的变量
答案 1 :(得分:0)
我不认为你是在泄漏记忆,因为它们是自动释放的物体,所以你在这方面很好。但是,您可以直接执行此操作,而不是创建新的自动释放对象 -
maxCount = count;
我认为你应该能够实现你想要用这两行做的事情。
NSNumber * maxCount = [[rates allValues] valueForKeyPath:@"@max.intValue"];
NSNumber * maxRate = [[rates allKeysForObject:maxCount] valueForKeyPath:@"@max.doubleValue"];
答案 2 :(得分:0)
我可能错了,但您要将自动释放的对象分配给count和maxCount。它们不应该被保留或复制吗?
您的代码不会泄漏,但在完成阻止后,NSNumber对象应该很快被解除分配。