autorelease

来源:互联网 发布:手机淘宝二维登录 编辑:程序博客网 时间:2024/05/21 19:31

代码:

__weakid reference = nil;

__weakid reference2 = nil;

__weakid reference3 = nil;

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

   NSArray *arr = [NSArrayarrayWithObject:@(92)];

   reference = arr;

    

    @autoreleasepool {

        NSArray *arr2 = [NSArrayarrayWithObjects:@(22),@(33), [NSStringstringWithFormat:@"i was a string"],nil];//[NSString stringWithFormat:@"i was a string"]在堆里;@(22), @(33) 是常量,一直有。

       reference2 = arr2;

        [arr2enumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop) {

            

           if (!stop) {

               NSLog(@"stop");

            }

           if (idx==2) {

               reference3 = obj;

            }

           NSLog(@"reference3 %@",reference3);

           NSLog(@"enumerate:%@ %lu %p", obj, (unsignedlong)idx, stop);

        }];

        NSLog(@"reference3 %@",reference3);

        NSLog(@"%@", [reference3stringByAppendingFormat:@"hello"]);

        NSLog(@"reference2 %@",reference2);

    }

//    reference3 = @"123";

    NSLog(@"%@", [reference3stringByAppendingFormat:@"hello"]);

    NSLog(@"reference3 %@",reference3);

    NSLog(@"reference2 %@",reference2);

}


- (void)viewWillAppear:(BOOL)animated{

    [superviewWillAppear:animated];

    NSLog(@"viewWillAppear:%@",reference);

    NSLog(@"reference3 %@",reference3);

}


- (void)viewDidAppear:(BOOL)animated{

    [superviewDidAppear:animated];

    NSLog(@"viewDidAppear:%@",reference);

    [referenceremoveAllObjects];

    NSLog(@"reference3 %@",reference3);

}


2015-04-01 14:02:20.632 AutoreleaseTest[1904:567209] reference3 (null)

2015-04-01 14:02:20.632 AutoreleaseTest[1904:567209] enumerate:22 0 0x7fff5d363a1f

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 (null)

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] enumerate:33 1 0x7fff5d363a1f

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 i was a string

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] enumerate:i was a string 2 0x7fff5d363a1f

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 i was a string

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] i was a stringhello

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference2 (

    22,

    33,

    "i was a string"

)

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] (null)

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 (null)

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference2 (null)

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] viewWillAppear:(

    92

)

2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 (null)

2015-04-01 14:02:20.643 AutoreleaseTest[1904:567209] viewDidAppear:(null)

2015-04-01 14:02:20.647 AutoreleaseTest[1904:567209] reference3 (null)


在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop.

0 0