2012-02-09 27 views
16

Hãy xem xét ví dụ sau:Có @autoreleasepool {} thoát khi trả lại/thoát sớm không?

- (void)doSomething { 
    @autoreleasepool { 
     if (someCondition) { 

     /* ... allocate some autoreleased objects here ... */ 

     return; 
     } 
    } 
} 

Trước đây, với NSAutoreleasePools dẫn sử dụng, nếu chúng tôi trở về sớm, chúng tôi cần phải gọi [pool drain], nếu không hồ bơi sẽ không được để ráo nước. Với sự mới @autoreleasepool {}

+0

http://stackoverflow.com/questions/5083216/return-statement-inside-nsautoreleasepool-scope –

+1

tôi không thể tìm thấy câu trả lời một cách nhanh chóng đủ trên interwebs, do đó tôi đang hỏi và trả lời cùng một lúc ... –

Trả lời

14

Câu trả lời là YES:

Khi khối được thoát bình thường, cho dù bởi fallthrough hoặc đạo diễn dòng điều khiển (như trả lại hoặc phá vỡ), hồ bơi autorelease được khôi phục vào lưu nhà nước, phát hành tất cả các đối tượng trong đó. Khi khối được thoát với một ngoại lệ, các hồ bơi không được thoát nước.

Nguồn: http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool

Các vấn đề liên quan