2012-02-14 37 views
8

Tôi đang bối rối khi xem tài liệu của Apple và đọc qua các mẫu thiết kế Cocoa. Trong tài liệu hướng dẫn của Apple cho copyWithZone:, nó đọc:Ghi đè lên bản sao hoặc copyWithZone: hoặc cả hai?

Phương pháp này tồn tại để đối tượng lớp có thể được sử dụng trong các tình huống mà bạn cần một đối tượng mà phù hợp với các giao thức NSCopying. Đối với ví dụ , phương pháp này cho phép bạn sử dụng đối tượng lớp làm khóa cho đối tượng N2ictionary . Bạn không nên ghi đè phương thức này.

Đối copy nó đọc:

Đây là một phương pháp thuận tiện cho các lớp học thông qua giao thức NSCopying . Một ngoại lệ được nêu ra nếu không có triển khai cho copyWithZone :.

NSObject không hỗ trợ giao thức NSCopying. Các lớp con phải hỗ trợ giao thức và thực hiện phương thức copyWithZone:. Phiên bản lớp con của phương thức copyWithZone: phải gửi thông báo đến siêu đầu tiên, để kết hợp triển khai của nó, trừ khi phân lớp xuống trực tiếp từ NSObject.

Trong các ví dụ trong thiết kế Cocoa Patterns, họ ghi đè copyWithZone:mutableCopyWithZone: nhưng không ghi đè copy khi phù hợp với các giao thức NSCopying. Đó có phải là những gì tôi nên làm gì nếu tôi muốn sử dụng phân lớp tùy chỉnh của tôi trong một NSDictionary làm khóa?

Hoặc tôi có ghi đè copy không?

Tương tự, nếu tôi làm [myClass copy], điều đó có gọi số copyWithZone: hoặc copy cho lớp con tùy chỉnh của tôi không? Cảm ơn.

Trả lời

14

Nó khá đơn giản: việc triển khai mặc định copy chỉ cần gọi copyWithZone: bằng đối số NULL. Vì vậy, bạn nên luôn luôn triển khai copyWithZone:. Tuy nhiên, do vùng bộ nhớ không được sử dụng (theo như tôi biết) trên iOS, bạn nên bỏ qua vùng mà không đưa ra bất kỳ giả định nào.

Edit: để xây dựng, bạn có thể thực hiện copy là tốt, nhưng bạn phải thực hiện copyWithZone: bởi vì bạn không bao giờ biết được trong số họ NSDictionary sẽ gọi trong iOS 6.

0

Bạn có thể tiếp tục sử dụng sự tiện lợi lớp cha phương pháp như nó là, bởi vì nó không có gì, nhưng gọi copyWithZone: trong mọi trường hợp.

Điều này đúng với bất kỳ phương pháp tiện lợi nào. Bạn nên tìm ra phương thức mà họ gọi và ghi đè thay vào đó.

Cũng như đã nói ở trên, các vùng không còn được sử dụng nữa, nhưng phương pháp vẫn có thông số đó cho tính tương thích và lý do lịch sử.

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