代码之家  ›  专栏  ›  技术社区  ›  JeremyF

Objective-C对象发布错误[重复]

  •  1
  • JeremyF  · 技术社区  · 11 年前

    我是Objective-C的新手,在释放内存时已经遇到了两个类似的问题。这是:

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]intit];
    //^^ NSAutoreleasePool is unavailable: not available in automatic reference counting
    
    [lord release];
    //^^ Same error as NSAutoreleasePool
    

    我不知道为什么这不起作用,它似乎对其他人起作用。无论如何,如果我能在这方面得到一些帮助,那将是非常棒的,非常感谢!

    1 回复  |  直到 11 年前
        1
  •  2
  •   Tamás Zahola    11 年前

    使用自动引用计数时,不能手动使用保留/释放/自动释放选择器。手动引用计数是旧的内存管理方式——现在,您应该始终使用ARC,忘记手动发送“释放”消息,因为它们是由编译器自动插入的。

    NSAutoreleasePool被替换为语言级构造@autoreleasepool: https://developer.apple.com/library/ios/documentation/cocoa/conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html

    编辑:@autoreleasepool示例:

    在父自动释放池耗尽之前,内存中有10000个对象:

    for(int i = 0; i < 10000; i++){
        NSString * s = [NSString alloc] initWithFormat:@"%d",i];
    }
    

    在内存使用高峰时,该算法在内存中有10000个NSString。但是,请考虑以下变体:

    for(int i = 0; i < 10000; i++){
        @autoreleasepool{
            NSString * s = [NSString alloc] initWithFormat:@"%d",i];
        }
    }
    

    这样,一次只有一个NSString,它在每次迭代结束时被释放。

    推荐文章