美文网首页iOS面试
iOS @autoreleasepool是什么?什么时候用?什么

iOS @autoreleasepool是什么?什么时候用?什么

作者: 哔哩哔哩智能喵 | 来源:发表于2016-10-09 17:07 被阅读336次
    • @autoreleasepool是什么?
      • @autoreleasepool个人理解是和MRC下的NSAutoreleasePool一样的
      • NSAutoreleasePool又是什么?
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSString* str = [[[NSString alloc] initWithString:@"666"] autorelease];
    [pool release];
    
    • 我们可以在创建对象的时候给对象发送"autorelease"消息,然后当NSAutoreleasePool结束的时候,标记过"autorelease"的对象就会被释放掉。

    • 在ARC下,我们不需要在写autorelease消息,ARC会自动帮我们加。这个时候@autoreleasepool做的事情,就和NSAutoreleasePool一模一样了。

    • 什么时候用@autoreleasepool?

    • 官方是这样说的

      • 写基于命令行的的程序时,就是没有UI框架,如AppKit等Cocoa框架时。
      • 写循环,循环里面包含了大量临时创建的对象。(本文的例子)
      • 创建了新的线程。(非Cocoa程序创建线程时才需要)
      • 长时间在后台运行的任务。
    • 利用@autoreleasepool优化循环

    • 利用@autoreleasepool优化来循环的内存占用

      • 如果循环次数非常多,而且循环体里面的对象都是临时创建使用的,就可以用@autoreleasepool 包起来,让每次循环结束时,可以及时释放临时对象的内存
    //来自Apple文档,见参考
    NSArray *urls = <# An array of file URLs #>;
    for (NSURL *url in urls) { 
      @autoreleasepool { 
    NSError *error;
    NSString *fileContents = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 
    /* Process the string, creating and autoreleasing more objects. */ }
    }
    
    • @autoReleasePool什么时间释放?
    • 每次Runloop结束时会有专门的时机用来释放

    相关文章

      网友评论

        本文标题:iOS @autoreleasepool是什么?什么时候用?什么

        本文链接:https://www.haomeiwen.com/subject/sctmyttx.html