autorelease

代码:

__weak id reference = nil;

__weak id reference2 = nil;

__weak id reference3 = nil;

- (void)viewDidLoad {

    [super viewDidLoad];

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

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

    reference = arr;

    

    @autoreleasepool {

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

        reference2 = arr2;

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

            

            if (!stop) {

                NSLog(@"stop");

            }

            if (idx==2) {

                reference3 = obj;

            }

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

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

        }];

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

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

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

    }

//    reference3 = @"123";

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

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

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

}


- (void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

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

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

}


- (void)viewDidAppear:(BOOL)animated{

    [super viewDidAppear:animated];

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

    [reference removeAllObjects];

    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值