2011-03-06 26 views
5

Trên iOS/CocoaTouch, tôi thường thấy mã tạo một phiên bản mới của NSAutoreleasePool trong một phương thức. Gần đây tôi đã nhìn thấy một trong một NSOperation.NSAutoreleasePool. Khi nào nó thích hợp để tạo ra một hồ bơi autorelease mới?

Quy tắc cơ bản để thiết lập phiên bản mới của NSAutoreleasePool là gì? Tại sao điều này thích hợp hơn để chỉ đơn giản dựa vào hồ bơi phát hành đã tồn tại từ trước được tạo trong main.m?

Cảm ơn,
Doug

Trả lời

6

Bạn có thể sử dụng một hồ bơi autorelease mới bất cứ khi nào bạn muốn, nhưng nó không phải lúc nào cũng có lợi. Nó là cần thiết bất cứ khi nào bạn bắt đầu một chủ đề mới hoặc các đối tượng autoreleased trong chủ đề đó sẽ bị rò rỉ. Nó cũng phổ biến để tạo ra các nhóm autorelease mới trong một phương thức mà bạn tạo và autorelease một số lượng lớn các đối tượng. Ví dụ, nếu bạn có một vòng lặp tạo 10 đối tượng trong mỗi 50 lần lặp, bạn nên xem xét việc tạo một nhóm tự động trả lời cho phương thức đó, nếu không phải là một phần của vòng lặp sao cho một đối tượng mới được tạo cho mỗi lần lặp.

+0

Khi nào là một nhóm tự động trả lời địa phương không có lợi. Tôi thu thập được động cơ để tạo ra một động lực để quản lý mem tốt. Ngoài ra, bạn nói rằng một nhóm autorelease mới phải được tạo cho các chủ đề mới. Điều này có đúng với NSOperations không? Tôi là một người thử nghiệm cuồng tín và không thấy mems nào bị rò rỉ với các NSOperations hiện tại của tôi mà thiếu một nhóm autorelease địa phương. – dugla

+0

@dugla Tôi không chắc liệu bạn có cần tạo một tài khoản cho NSOperations hay không. Khi một đối tượng được tự động phát hành mà không có một hồ bơi, nó sẽ in một thông báo đến bàn điều khiển, vì vậy bạn nên biết nếu bạn cần một. Tạo ra một hồ bơi là không có lợi nếu bạn không tạo ra rất nhiều đối tượng trong suốt cuộc đời của nó bởi vì nó là thêm một phân bổ thêm và chiếm chu kỳ xử lý. Nó không thể có bất kỳ lợi ích nào trừ khi bạn sử dụng các đối tượng khách quan trong suốt cuộc đời của nó, vì các đối tượng khác không sử dụng nó. – ughoavgfhw

3

Tạo hồ bơi của riêng bạn khi chưa có sẵn một vị trí (chẳng hạn như trong một chủ đề mới) hoặc khi vòng lặp chạy không đủ (tạo đối tượng được tự động phát trong một vòng lặp sẽ chạy cho nhiều lặp lại) hoặc khi bạn muốn tăng quyền kiểm soát khi các đối tượng tự động tạo mà bạn tạo cuối cùng được phát hành.

1

Tôi đã thử nghiệm trong iOS 4.3 và bạn cần tạo hồ bơi tự động phát hành riêng khi thực hiện performSelectorInBackground. Bạn không cần phải tạo khi sử dụng NSOperation hoặc dispatch_async.

Dường như trong iOS> = 5.0 hệ thống tự động tạo nhóm tự động chia sẻ ngay cả khi sử dụng performSelectorInBackground, vì vậy tôi không thể tìm thấy trường hợp khi bạn cần tạo nhóm tự động phát hành riêng.

Không thể tìm thấy thay đổi được ghi lại.

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