2010-09-16 68 views
0

所以我试图在我的应用程序中实现一个搜索栏,并且非常接近,但似乎无法弄清楚发生这种内存错误的位置。这就是我的搜索方法的一部分,看起来像:iPad搜索栏内存访问不良?

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

你有没有在GDB尝试“po searchArray”?它输出的是什么 – VdesmedT 2010-09-16 15:13:40

+0

我解决了它,看到我对你的答案的评论。 :) – gabaum10 2010-09-16 15:20:10

回答

0
NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

// Normally holds the object (ex: 70 locations) 
searchArray = self.copyOfFilters ; 

是一个非常基本的内存泄漏。您创建了一个NSMuatbleArray,并放弃了使用下一条语句释放它的机会。

确保您不会在代码中的任何位置释放或更改copyOfFilters或searchArray。

+0

解决它:更改上述代码为 - NSMutableArray * searchArray = [[NSMutableArray alloc] initWithArray:copyOfFilters copyItems:YES];看起来我仍然需要处理内存管理。 :(感谢您的帮助! – gabaum10 2010-09-16 15:10:16

+0

您是否知道我可以去阅读关于mem管理的简单资源?(我还没有一本书尚未引用这些内容)。谢谢 – gabaum10 2010-09-16 15:19:02

+0

http:// developer。 apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html(你将不得不登录) – VdesmedT 2010-09-16 15:35:47

0

您是否在释放过滤器的同时仍然调用displaysFilters?

+0

那是我如何初始化搜索数组 – gabaum10 2010-09-16 15:11:11

0

林想知道如果你有一个问题,当self.copyOfFilters修改或如此。 尝试

searchArray = [self.copyOfFilters copy] ; 

不要忘了环后释放searchArray。 这可能是在黑暗中拍摄的,但可能值得一试?

+0

如果过滤器的副本被释放或改变,这将不会产生任何分歧。 – VdesmedT 2010-09-16 15:12:16