####我們都知道在記憶體管理中有2種釋放記憶體,一種是[ objc release] 直接釋放 還有一種是 [objc autorelease].當對象調用autorelease時,會将對象加入自動釋放池中。自動釋放池會在将來的某一時刻将存在池中的對象釋放掉。清空自動釋放時,系統會向其中的對象發送release消息。
我們知道自動釋放池就是把其作用域裡調用autorelease的對象存放的地方,在将來的某一時刻将存在池中的對象釋放掉。那麼他有什麼作用呢?
一般不用我們建立自動釋放池,主線程和gcd預設都有自動釋放池。
用于容納UIApplicationMain函數所自動釋放的那些對象
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
複制代碼
####1.降低記憶體峰值
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i = 0; i < 10000; i++) {
NSString *str = [NSString stringWithFormat:@"123"];
[array addObject:str];
}
複制代碼
上述代碼裡的str臨時變量 arc會幫我們自動釋放池中,等下時機釋放。但我們在短時間内往裡面加入太多,會導緻記憶體猛增.是以我們可以這樣
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i = 0; i < 10000; i++) {
@autoreleasepool {
NSString *str = [NSString stringWithFormat:@"123"];
[array addObject:str];
}
}
複制代碼
這樣寫str放入我們新建立的自動釋放池中,當走到塊末尾,會清空池中的對象,降低記憶體峰值。當然一般隻要不是消耗太大,不建議這樣寫,畢竟建立自動釋放池也是有消耗的
轉載于:https://juejin.im/post/5a31f19f6fb9a044fd11c73e