Tại sao và trong những trường hợp nào chúng ta nên sử dụng @autoreleasepool?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
29 lượt xem
Objective-C master

Khi bạn có thể đảm bảo rằng một luồng cụ thể không sử dụng các đối tượng tự động giải phóng bộ nhớ (autoreleased objects), luồng đó sẽ không cần một autorelease pool.

Tránh sử dụng autoreleasepool là một lời khuyên không tốt, vấn đề này có hai mặt. Việc sử dụng các đối tượng được tự động giải phóng bộ nhớ mang theo một khoản chi phí nhất định (mặc dù không đáng kể trong hầu hết các tình huống), và nên tránh khi có thể. Đặc biệt là trong trường hợp có nhiều điểm thoát khỏi một phương thức, hoặc có thể xảy ra ngoại lệ, việc sử dụng autorelease giúp tránh rò rỉ bộ nhớ và làm cho mã nguồn sạch hơn.

Tuy nhiên, hãy nhớ rằng điều này có nghĩa là không có thứ gì trên luồng đó có thể sử dụng autorelease, bao gồm bất kỳ framework nào mà bạn có thể gọi. Có những tình huống mà điều này xảy ra, ví dụ như trong một kịch bản sản xuất/người tiêu dùng cổ điển. Bạn có một người sản xuất tạo ra các đối tượng, gửi chúng đến vòng lặp chạy của luồng chính và có thể đăng ký chúng trong autorelease pool của luồng chính.

Nói chung, không khuyến nghị tạo một luồng mà trong đó có công việc đáng kể được thực hiện (ngoài việc tính toán đơn giản và lâu dài) mà không có autorelease pool.

{{login.error}}