2011-10-22 65 views
0

对于10.6和ios 5,我使用xcode 4.2,并且在使用xcode分析项目时报告了这种奇怪的内存泄漏。objective c subStringToIndex内存泄漏

下面是代码:

- (void) imagePickerController: (UIImagePickerController*) reader 
didFinishPickingMediaWithInfo: (NSDictionary*) info 
{ 
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults]; 
ZBarSymbol *symbol = nil; 
for (symbol in results) break; 
[reader dismissModalViewControllerAnimated: NO]; 

[self beep]; 
NSString *upcScanned = [NSString stringWithFormat:@"0%@", symbol.data]; //line 1 
NSString * name = [self getItemName:upcScanned]; 
ProductNameDialog *dialog = [[ProductNameDialog alloc] initWithNibName:@"ProductNameDialog" bundle:nil]; 

//dialog.upcScanned = [upcScanned substringToIndex:[upcScanned length] - 1];//line 2 
[name release]; 
[self presentModalViewController:dialog animated:YES]; 
[dialog release];   
} 

LINE2是线报道内存泄漏。

+1

添加断点或登录对话框释放以查看它是否实际被调用。 –

+2

你是否还在对话的dealloc方法中释放了'upcScanned'(或者因为你没有定义实例变量而将它设置为'nil')? 'viewDidUnload'不一定会被调用,它通常只用于低内存条件。 – omz

+1

泄漏检测器报告分配泄漏物体的线。静态分配的字符串永远不会被认为是泄漏。您可能正在使用upcScanned在其他方法,你有一个不平衡的保留。 –

回答

0

最合理的,最可能的结论是方法[self getItemName:upcScanned]保留传入的字符串,但不释放它。

+1

产品 - >在Xcode中分析时,结果如何? – NJones

+0

@PeterPeiGuo我很好奇你为什么不接受这个答案。 – NJones