潜在的泄漏值永远不会读取NSMutableArray
注:我想分配我的NSMutableArray,然后在其中分配数据。潜在的泄漏值永远不会读取NSMutableArray
我有泄漏在下面的代码
NSMutableArray *responseArr=[[NSMutableArray alloc]init];
responseArr =[response valueForKey:@"result"];
此外,在存储在这里的值从来没有读过
NSString *name=_txt_name.text;
if ([name length]==0) {
[email protected]"";
}
而且漏下面
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
//below here i get leak
NSDate *dateStart = [[NSDate alloc] init];
dateStart = [dateFormatter dateFromString:startDate];
编辑:
我有禁用ARC使用可达性类-fno-objc弧甚至低于我得到泄漏
此行
NSMutableArray *responseArr=[[NSMutableArray alloc]init];
分配一个新的NSMutableArray和分配引用来responseArr
这line
responseArr = [response valueForKey:@"result"];
从字典中获取值(大概是对NSMutableArray的引用)并将其指定为responseArr
。此时不再提及您分配的原始NSMutableArray
,因此它将被解除分配。
你可以只说:
NSMutableArray *responseArr = (NSMutableArray *)response[@"result"];
与日期代码
同样,你可以只说:
NSDate *dateStart = [dateFormatter dateFromString:startDate];
没有必要指定一个初始值,只把它扔掉。
假设您正在使用ARC,所显示的任何代码都不会导致泄漏。
如果你不使用ARC,那么开始使用ARC!
他没有使用ARC。 –
hello @paulw is NSMutableDictionary * Data = [NSMutableDictionary new]; Data =(NSMutableDictionary *)[arrData objectAtIndex:indexPath.row]; Is equivalent => NSMutableDictionary * Data =(NSMutableDictionary *)[arrData objectAtIndex:indexPath.row]; – iphonemaclover
种。在第一种情况下,您不必分配,然后丢弃字典。在第二种情况下,您不是,但是在两种情况下'数据'将具有相同的值 – Paulw11
A.第一个片段
使用MRC(MRR)你有+alloc
自己来平衡分配:
NSMutableArray *responseArr = [[NSMutableArray alloc]init];
responseArr = [response valueForKey:@"result"];
在你分配的NSArray
实例的第一道防线。您必须稍后(自动)释放它,否则就是内存泄漏。我认为您误解了您使用-valueForKey
创建了新的NSArray
的实例,并将此新参考的值分配给responseArr
。 (因此,你不需要一个可变数组。)之后,你创建了两个对象只有一个引用到新的,你永远不能释放旧的。
做这样的事情:
NSArray *responseArr = [[NSArray alloc]init];
NSArray *resultArr =[response valueForKey:@"result"];
[responseArr release];
你不必做与resultArr
提到,因为它不与+alloc-init
创建的对象。 Here你得到一个所有权的介绍。
B.第三片断
这是最后一个例子是相同的:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
你+的alloc-init用于实例对象,但没有释放你的代码。因此,当参考文献dateFormatter
失去其范围(生命周期)时,它不能再被释放,即从方法返回。
在方法结束时添加以下代码:
[dateFormatter release];
C.第二代码段
第二实例具有不同的问题:您的值分配给该VAR name
不使用在可变下面的代码。所以分配值是没有意义的。
什么是错误? – Paulw11
对不起有泄漏没有错误 – iphonemaclover
没有任何代码显示导致泄漏的原因。如果您创建了变量然后从不读取它们,您将会收到警告;编译器警告你,你正在执行不必要的操作 – Paulw11