内存泄漏iOS
是什么导致我的内存泄漏: 我有一个全局变量:内存泄漏iOS,ios,memory-leaks,Ios,Memory Leaks,是什么导致我的内存泄漏: 我有一个全局变量: @property (nonatomic, strong) NSArray *productArray; 我有从核心数据查询数据的功能实现: - (NSArray *)fetchallProductWithTag:(NSString *)tag { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tags.name contains [cd] %@", tag
@property (nonatomic, strong) NSArray *productArray;
我有从核心数据查询数据的功能实现:
- (NSArray *)fetchallProductWithTag:(NSString *)tag
{
NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"tags.name contains [cd] %@", tag];
NSSet *itemsSet = [self.managedObjectContext
fetchObjectsForEntityName:TABLE_NAME_PRODUCT
withPredicate:predicate
columns:nil unique:NO];
return itemsSet.allObjects;
}
下面是从类别类中实现的fetchObjectsForentyName:withPredicate:columns::
- (NSSet *)fetchObjectsForEntityName:(NSString *)entityName
withPredicate:(NSPredicate *)predicate
columns:(NSArray *)columns
unique:(BOOL)unique
{
NSEntityDescription *entity = [NSEntityDescription
entityForName:entityName inManagedObjectContext:self];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];
[request setEntity:entity];
[request setPredicate:predicate];
[request setReturnsDistinctResults:unique];
if( columns.count > 0)
[request setPropertiesToFetch:columns];
if( columns.count > 0 || unique )
[request setResultType:NSDictionaryResultType];
NSError *error = nil;
NSArray *results = [self executeFetchRequest:request error:&error];
if (error != nil)
{
[NSException raise:NSGenericException
format:@"Error fetching in %@; error:%@",
entityName, error.localizedDescription];
}
if( results.count > 0 )
{
return [NSSet setWithArray:results];
}
return nil;
}
在我的视图控制器中,我有以下函数调用:
self.productArray = [myClass fetchAllProductWithTag:@"All"];
然后,在viewcontroller类代码的某个地方,我重置了productArray的值:
self.productArray = [myClass fetchAllProductWithTag:@"Favorites"];
然后发生了泄漏。结果是导致泄漏的行是try-catch语句。我有这样的想法:
Product *product = nil;
@try
{
product = [self.productArray objectAtIndex:index];
}
@catch (NSException *exception)
{
return;
}
Product *product = nil;
if( index < self.productArray.count )
product = [self.productArray objectAtIndex:index]
else
return;
我不想检查索引是否超出范围。所以我把它放在一个try-catch中,并在异常发生时返回
所以,我试着移除了try catch,得到了如下结果:
Product *product = nil;
@try
{
product = [self.productArray objectAtIndex:index];
}
@catch (NSException *exception)
{
return;
}
Product *product = nil;
if( index < self.productArray.count )
product = [self.productArray objectAtIndex:index]
else
return;
Product*Product=nil;
if(索引
最后,泄漏消失了。结果是导致泄漏的线路是try-catch语句。我有这样的想法:
Product *product = nil;
@try
{
product = [self.productArray objectAtIndex:index];
}
@catch (NSException *exception)
{
return;
}
Product *product = nil;
if( index < self.productArray.count )
product = [self.productArray objectAtIndex:index]
else
return;
我不想检查索引是否超出范围。所以我把它放在一个try-catch中,并在异常发生时返回
所以,我试着移除了try catch,得到了如下结果:
Product *product = nil;
@try
{
product = [self.productArray objectAtIndex:index];
}
@catch (NSException *exception)
{
return;
}
Product *product = nil;
if( index < self.productArray.count )
product = [self.productArray objectAtIndex:index]
else
return;
Product*Product=nil;
if(索引
最后,泄漏消失了。你怎么知道有泄漏?我正在使用ARC。xcode 5Im使用xcode工具。您是否在后台线程中运行此代码?是否使用analyze。。它会告诉你你的代码哪里有漏洞。如果有,你怎么知道有漏洞?我用的是ARC。xcode 5Im使用xcode工具。您是否在后台线程中运行此代码?是否使用analyze。。它将向您显示代码中存在漏洞的位置。如果存在漏洞,那么try-catch中的内容是什么,为什么会导致泄漏?try-catch中的内容是什么,为什么会导致泄漏?