我在下面的代码中遇到了漏洞:
search.h
NSString *str;search.m
-(void)searchMethod:(UISearchBar *)aSearchBar
{
/*******Showing leak at below line *************/
str=[aSearchBar.text stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}我不知道如何解决这个问题,有人能帮我解决这个问题吗?
提前谢谢。
发布于 2010-06-28 20:04:25
你怎么知道这是泄密的?在您的示例中,str是自动释放的,这意味着它将在此方法返回一段时间后释放自身。只有在没有自动释放池的单独线程上执行此任务,或者使用从未清除过的自动释放池,str才会泄漏。如果这段代码运行在主线程上,str肯定不会泄漏。
我认为你崩溃是因为你没有保留str。您将字符串存储到一个全局变量中,但不会增加保留计数。这意味着一旦字符串被自动释放,grobal变量就会指向无效内存。为了确保对象在方法作用域之外保持活动状态,您必须保留它(除非您通过alloc/init...,new...创建此对象。或复制...)。
str = [aSearchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
str = [str retain]; // Keep object alive beyond the scope of this method当然,如果像这样保持对象存活,则必须自己在代码中的某个位置释放它。因此,如果希望在每次调用该方法时覆盖此变量,请使用
[str release];
str = [aSearchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
str = [str retain]; // Keep object alive beyond the scope of this method不要忘了在这个对象的dealloc方法中释放str (为此覆盖dealloc;不要忘记在被覆盖的方法中作为最后一条指令调用[super dealloc] )。
https://stackoverflow.com/questions/3132030
复制相似问题