2009-04-12 27 views

Trả lời

11

Thường thì bạn không cần phải tạo hồ bơi tự động trả tiền, bởi vì hệ thống quan tâm đến điều này. Nhưng, đôi khi bạn cần phải làm điều này. Đó là bình thường trong các vòng lớn. Mã sẽ trông như thế này:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int i;  
for (i = 0; i < 1000000; i++) {  
    id object = [someArray objectAtIndex:i]; 
    // do something with object 
    if (i % 1000 == 0) { 
    [pool release]; 
    pool = [[NSAutoreleasePool alloc] init]; 
    } 
} 
[pool release]; 

hồ autorelease được lưu giữ như một chồng: nếu bạn thực hiện một hồ bơi autorelease mới, nó được thêm vào phía trên cùng của ngăn xếp, và mỗi tin nhắn autorelease đặt người nhận vào hồ bơi trên cùng .

+0

Mô tả hay. Calling objectAtIndex: tuy nhiên không thêm bất cứ thứ gì vào nhóm autorelease, vì vậy bạn có thể sử dụng nó trong vòng lặp mà không có nhóm autorelease. –

+1

Hãy nhớ rằng Apple khuyến nghị sử dụng [pool drain] thay vì [pool release] như là một thói quen tương thích trong tương lai với môi trường GC. –

+0

@Marc Charbonneau sau đó bạn sẽ không bị rò rỉ vì không gọi phát hành trên hồ bơi? –

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