小编Hap*_*ode的帖子

NSNumber可能的内存泄漏

创建一个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)

xcode memory-leaks nsnumber

5
推荐指数
1
解决办法
218
查看次数

标签 统计

memory-leaks ×1

nsnumber ×1

xcode ×1