2010-03-31 34 views
7

Về quản lý bộ nhớ Delphi, chiến lược thiết kế của bạn là gì?Chiến lược thiết kế quản lý bộ nhớ Delphi: Object hoặc Interface?

  • Trường hợp sử dụng nơi bạn muốn tạo và giải phóng Đối tượng theo cách thủ công?
  • Các trường hợp sử dụng khi giao diện, InterfacedObject và cơ chế tính tham chiếu của chúng sẽ được ưu tiên hơn?

Bạn có xác định được một số bẫy hoặc khó khăn với đối tượng được tính tham chiếu không?

Cảm ơn bạn đã chia sẻ kinh nghiệm của mình tại đây.

Trả lời

7

Bất cứ khi nào bạn chia sẻ đối tượng giữa các chủ đề, tốt nhất là sử dụng giao diện. Một đối tượng được chia sẻ không nhất thiết phải có một chủ sở hữu có thể nhận dạng được, do đó để cho chuỗi từ bỏ tham chiếu cuối cùng đến giao diện miễn phí đối tượng thực hiện là một sự phù hợp tự nhiên. Xem OmniThreadLibrary để biết ví dụ về cách sử dụng giao diện cho cả thiết kế và khắc phục một số vấn đề về quyền sở hữu phức tạp trong mã đa luồng.

1

Bạn nên luôn luôn thích giao diện trừ khi không thể thực hiện được do giới hạn VCL. Tôi nghi ngờ rằng, đã có giao diện có sẵn trong Delphi 1.0, VCL sẽ bật ra rất khác nhau.

Một lưu ý nhỏ là xem ra các chu trình tham chiếu. Nếu A giữ một giao diện cho B và B giữ một giao diện cho A, cả hai sẽ tồn tại mãi mãi.

+0

Bạn có thể nêu chi tiết các hạn chế VCL đó không? –

+3

Đơn giản là nhiều lớp VCL sử dụng các cơ chế khác nhau để quản lý bộ nhớ và bạn không thể chỉ trượt một giao diện ở giữa. Trường hợp hiển nhiên là con của TComponent, được sở hữu bởi cha mẹ và bị phá hủy khi nó bị phá hủy. –

+2

Các thành phần VCL có thể có tất cả các loại tham chiếu với nhau, việc triển khai các thành phần như giao diện sẽ gây ra một cơn ác mộng tham chiếu vòng tròn. –

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