创建一个ARC新项目并在didFinishLaunchingWithOptions中注入此代码.
for (int i=0; i < 1000000; i++) {
NSNumber* num = [NSNumber numberWithInt:i];
NSLog(@"%@", num);
}
NSLog(@"over");
Run Code Online (Sandbox Code Playgroud)
应用程序的内存将增加.此外,在for循环结束时,内存不会减少.
但是,如果你替换相同的for循环:
NSNumber* num = [NSNumber numberWithInt:i];
Run Code Online (Sandbox Code Playgroud)
通过
NSNumber* num = [[NSNumber alloc] initWithInt:i];
Run Code Online (Sandbox Code Playgroud)
然后记忆将保持稳定.
这是预期的行为吗?
编辑:
好吧,让我们暂时把didFinishLaunchingWithOptions放在一边.您仍然可以放入viewDidLoad并删除零以便更快地到达for循环结束应用程序的内存将增长到~11 MB.当for循环结束时,内存不会减少.它仍然是~11 MB.
- (void)viewDidLoad {
[super viewDidLoad];
for (int i=0; i < 100000; i++) {
NSNumber* num = [NSNumber numberWithInt:i];
NSLog(@"%@", num);
}
NSLog(@"over");
}
Run Code Online (Sandbox Code Playgroud)
如果你去:
- (void)viewDidLoad {
[super viewDidLoad];
@autoreleasepool {
for (int i=0; i < 100000; i++) {
NSNumber* num = …Run Code Online (Sandbox Code Playgroud)