管理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]];
}
}
}];这部分代码工作正常(是枚举块中的bug吗?:
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];
}
}
};发布于 2011-06-29 19:34:16
在:
maxCount = [NSNumber numberWithInt:[count intValue]];
您的NSNumber将自动释放,并将在稍后的某个时间点自动释放。所以当你再次赋值给maxCount时,你不会有任何泄漏。
maxCount = [NSNumber numberWithInt:[count intValue]];
如果您使用[...alloc ...]因为在这种情况下,您获得的对象将被保留,并且您需要负责在将它们再次赋值给指向它们的变量之前释放它们。
发布于 2011-06-29 19:35:00
我不认为你是在泄露内存,因为它们是自动释放的对象,所以你在这方面很好。但是,您可以直接执行以下操作,而不是创建新的自动发布对象-
maxCount = count;另一种方法
我认为您应该能够实现您尝试使用这两行代码所要做的事情。
NSNumber * maxCount = [[rates allValues] valueForKeyPath:@"@max.intValue"];
NSNumber * maxRate = [[rates allKeysForObject:maxCount] valueForKeyPath:@"@max.doubleValue"];发布于 2011-06-29 19:41:41
我可能错了,但您正在将自动释放的对象分配给count和maxCount。它们不应该被保留或复制吗?
您的代码不会泄漏,但是在完成代码块之后,NSNumber对象应该很快就会被释放。
https://stackoverflow.com/questions/6519850
复制相似问题