Я пытаюсь сделать много временных объектов внутри цикла for, как показано ниже:
- (void)viewDidLoad {
[super viewDidLoad];
for (NSInteger i=0; i<NSIntegerMax; i++) {
NSString* str = [[NSString alloc]initWithFormat:@"%ld",(long)i];
NSLog(@"Address:0x%x, String:%@",(unsigned int)str,str);
}
}
, но память остается очень устойчивой с классом NSString
или NSMutableString
. Однако, если я изменю класс на UILabel
или другие классы, память увеличится невероятно быстро.
- (void)viewDidLoad {
[super viewDidLoad];
for (NSInteger i=0; i<NSIntegerMax; i++) {
UILabel* label = [[UILabel alloc]init];
NSLog(@"Address:0x%x, String:%@",(unsigned int)label,label);
}
}
Я даже оборачиваю свой код в пул автоматического выпуска, но кажется, что пул автоматического выпуска не имеет никакого смысла.
- (void)viewDidLoad {
[super viewDidLoad];
for (NSInteger i=0; i<NSIntegerMax; i++) {
@autoreleasepool{
UILabel* label = [[UILabel alloc]init];
NSLog(@"Address:0x%x, String:%@",(unsigned int)label,label);
}
}
}
Но для класса NSString даже без пула автоматического выпуска память остается очень стабильной и, кажется, никогда не будет расти. Я очень смущен этим явлением и надеюсь, что кто-нибудь сможет объяснить мне, почему это происходит. Спасибо.