IOS 常见内存泄漏以及解决方案
IOS常见内存泄漏以及解决方案
整理了几个内存泄漏的例子,由于转载地址已经找不到了,在这里就不一一列出来了。
1OC和CF转化出现的内存警告
CFStringRefcfString=CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)picDataString,NULL,CFSTR(":/?#[]@!$&'()*+,;="),kCFStringEncodingUTF8); NSString*baseString=[NSStringstringWithString:(NSString*)cfString]; //释放 CFRelease(cfString);
2,循环参照
A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放。
这种问题常发生于把delegate声明为strong属性了。
例,
@interfaceSampleViewController @property(nonatomic,strong)SampleClass*sampleClass; @end @interfaceSampleClass @property(nonatomic,strong)SampleViewController*delegate; @end
上例中,解决办法是把SampleClass的delegate属性的strong改为assing即可。
3,死循环
如果某个ViewController中有无限循环,也会导致即使ViewController对应的view关掉了,ViewController也不能被释放。
这种问题常发生于animation处理。
例,
比如,
CATransition*transition=[CATransitionanimation]; transition.duration=0.5; tansition.repeatCount=HUGE_VALL; [self.view.layeraddAnimation:transitionforKey:"myAnimation"];
上例中,animation重复次数设成HUGE_VALL,一个很大的数值,基本上等于无限循环了。
解决办法是,在ViewController关掉的时候,停止这个animation。
-(void)viewWillDisappear:(BOOL)animated{ [self.view.layerremoveAllAnimations]; }
内存泄露的情况当然不止以上两种。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!