内存管理

内存泄露的检测

可使用sdk自带的工具instruments进行检测,他相当于一个IDE,除了内存泄露还可以检查很多程序问题,例如执行时间,运行性能等等。

刚开始不会用的时候犯了个错误:使用了常量字符串进行泄露检测:

//超乎想象,这里没有内存泄露 NSString *leak1 = [[NSString alloc] initWithString:@"leak1"]; leak1 = nil; //oh yeah!内存泄露 NSMutableString *leak2 = [[NSMutableString alloc] initWithString:@"leak2"]; leak2 = nil 

原因在于第一种情况下,常量字符串作为静态存储,他的生命周期直到程序结束,又NSString是不可改变的,因为编译器将其优化为共享静态存储,因此作用于这个NSString object上的release没有效果。

第二种情况是可变字符串,此时将不得不为"leak2"重新生成一个object而不能共享静态存储。

你可能感兴趣的:(内存管理)