欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS 常见内存泄漏以及解决方案

程序员文章站 2024-02-13 09:47:46
ios 常见内存泄漏以及解决方案 整理了几个内存泄漏的例子,由于转载地址已经找不到了,在这里就不一一列出来了。 1 oc和cf转化出现的内存警告 cfstr...

ios 常见内存泄漏以及解决方案

整理了几个内存泄漏的例子,由于转载地址已经找不到了,在这里就不一一列出来了。
1 oc和cf转化出现的内存警告

cfstringref cfstring = cfurlcreatestringbyaddingpercentescapes(kcfallocatordefault,(cfstringref)picdatastring,null,cfstr(":/?#[]@!$&'()*+,;="),kcfstringencodingutf8);

nsstring *basestring = [nsstring stringwithstring:(nsstring *)cfstring];

//释放
cfrelease(cfstring);

2,循环参照

a有个属性参照b,b有个属性参照a,如果都是strong参照的话,两个对象都无法释放。

这种问题常发生于把delegate声明为strong属性了。

例,

@interface sampleviewcontroller

@property (nonatomic, strong) sampleclass *sampleclass;

@end

@interface sampleclass

@property (nonatomic, strong) sampleviewcontroller *delegate;

@end

上例中,解决办法是把sampleclass 的delegate属性的strong改为assing即可。

3,死循环

如果某个viewcontroller中有无限循环,也会导致即使viewcontroller对应的view关掉了,viewcontroller也不能被释放。

这种问题常发生于animation处理。

例,

比如,

catransition *transition = [catransition animation];

transition.duration = 0.5;

tansition.repeatcount = huge_vall;

[self.view.layer addanimation:transition forkey:"myanimation"];

上例中,animation重复次数设成huge_vall,一个很大的数值,基本上等于无限循环了。

解决办法是,在viewcontroller关掉的时候,停止这个animation。

-(void)viewwilldisappear:(bool)animated {

  [self.view.layer removeallanimations];

}

内存泄露的情况当然不止以上两种。

感谢阅读,希望能帮助到大家,谢谢大家对本站 的支持!