我當時正在泄漏的工具內存泄漏,發現在我的字典mutableDeepCopy大規模的泄漏,但我無法弄清楚什麼是錯的代碼。有什麼建議麼?無法弄清楚如何解決在iPhone上
@interface RootViewController : UIViewController{
NSDictionary *immutableDictionary;
NSMutableDictionary *mutableDictionary;
}
下面是在儀器突出的代碼行
self.mutableDictionary = [self.immutableDictionary mutableDeepCopy];
以下是創建一個字典
@interface NSDictionary(MutableDeepCopy)
-(NSMutableDictionary *)mutableDeepCopy;
@end
這裏的一個可變副本的方法方法實現,我已經強調了泄漏SAIDS代碼正在泄漏100%
- (NSMutableDictionary *) mutableDeepCopy {
NSMutableDictionary *dictionaryToReturn = [NSMutableDictionary dictionaryWithCapacity:[self count]];
NSArray *keys = [self allKeys];
for(id key in keys) {
id value = [self valueForKey:key];
id copy = nil;
if ([value respondsToSelector:@selector(mutableDeepCopy)]) {
copy = [value mutableDeepCopy];
} else if ([value respondsToSelector:@selector(mutableCopy)]) {
copy = [value mutableCopy]; //This is the Leak
}
if (copy == nil) {
copy = [value copy];
}
[dictionaryToReturn setValue:copy forKey:key];
}
return dictionaryToReturn;
}
與問題無關,但您應該使用objectForKey:/ setObject:forKey:而不是valueForKey:/ setValueForKey:後者實際上是爲KVC設計的,雖然他們在NSDictionary上做了幾乎相同的事情,但他們這樣做更緩慢且具有細微的差異。 – JeremyP 2010-12-05 22:22:23
感謝您的提示Jeremy – aahrens 2010-12-05 22:52:08