所以我试图在我的应用程序中实现一个搜索栏,并且非常接近,但似乎无法弄清楚这个内存错误发生的位置。这是我的搜索方法的一部分:
filters = [[NSMutableArray alloc] init];
NSString *searchText = detailSearch.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
// Normally holds the object (ex: 70 locations)
searchArray = self.copyOfFilters ;
//This is the line that is breaking after ~2-3 letters are entered in the search
for (NSString *sTemp in searchArray)
{
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[filters addObject:sTemp];
}
displayedFilters = filters;
copyOfFilters是视图首次加载时显示的显示过滤器的深层副本:
self.copyOfFilters = [[NSMutableArray alloc] initWithArray:displayedFilters copyItems:YES];
我已经跟踪了字母的输入,并且在2个字母后它是准确的,但是一旦你尝试在搜索栏中的空格后输入一个字母,它就会崩溃。 copyOfFilters = {(int)[$ VAR count]}对象的值。有谁知道这可能导致什么?谢谢!
答案 0 :(得分:0)
你是否在调用displayFilters时释放了过滤器?
答案 1 :(得分:0)
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
// Normally holds the object (ex: 70 locations)
searchArray = self.copyOfFilters ;
是一个非常基本的内存泄漏。你创建了一个NSMuatbleArray并且没有任何机会在下一个语句中释放它。
请确保不要在代码中的任何位置发布或更改copyOfFilters或searchArray。
答案 2 :(得分:0)
我想知道在修改self.copyOfFilters时是否遇到问题。 试试
searchArray = [self.copyOfFilters copy] ;
不要忘记在循环后释放searchArray。 这可能是在黑暗中拍摄但可能值得一试?