iOS—— iOS 内存管理:增长+泄漏

1、如果是循环中局部变量data没有释放导致的,给NSData 手动添加释放池

@autoreleasepool {
      your code    
   }

 

2、url 转变字典key值的时候出现内存暴增!

//设置字符串
NSString *urlStr = @"http://120.25.226.186:32812/resources/videos/minion_10.mp4";

//转变url
NSURL *url = [NSURL URLWithString:urlStr];

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

//absoluteString 直接将url变为字符串当作key的话 就会出现 内存暴增,
   如果直接将urlstr当作key的话,就不会出现
dict[url.absoluteString] = @"ZYCoderr";
while (1) {
    NSString *value = dict[url.absoluteString];
}

同样 在循环中创建字符串时

低内存版:

while (1) {

    NSString *a = [[NSString alloc] initWithFormat:@"asdfasdfasfasdf"];
}

高内存版

while (1) {
    NSString *a = [NSString stringWithFormat:@"asdfasdfasfasdf"];
}
先看absoluteString的属性声明,readonly && copy,看到两个属性,是一个计算值。
@property (readonly, copy) NSString *absoluteString;

autorelease的值在循环中会大量消耗内存,一般会使用autoreleasepool来降低内存峰值。

如:
@autoreleasepool {
        NSString *value = dict[url.absoluteString];
    }
原因

 

3、

posted @ 2017-03-04 21:59  徐家汇  阅读(175)  评论(0编辑  收藏  举报