可重复的内存增长才是真正的问题
应该避免内存的过高增长
ARC存在的内存问题
- 不再被引用的循环引用(Unreferenced retain cycles)
- 引用,但是不再使用的对象(Abandoned objects)
- Objective-C 和 Core Foundation 对象相互转换的内存管理
https://blog.csdn.net/yiyaaixuexi/article/details/8553659
block问题
block默认强应用内部的对象,因此以下情况会造成循环引用
__weak
-
__weak引用使用过程中可能为空
- 避免过度使用__weak,__weak的使用是需要消耗资源的
__autoreleasing
- 输出参数默认是__autoreleasing的,如NSError **(等价于NSError * __autoreleasing *)
-
如果@autoreleasepool中包含__autoreleasing参数,会导致奔溃
正确的实现方法为:
- (BOOL)startWithConfigurationURL:(NSURL*)url error:(NSError**)outError {
NSError *localError = nil;
BOOL wasSuccessful = YES;
@autoreleasepool {
// < get response from url >
NSDictionary *parsed = [NSJSONSerialization JSONObjectWithData:response
if (parsed) {
// < use dictionary >
} else {
wasSuccessful = NO;
} }
if (!wasSuccessful && outError) *outError = localError;
return wasSuccessful;
}