2009-12-14 26 views
5

Tôi muốn có một chuỗi mô tả cho một đối tượng trong Cocoa. Tôi đang nghĩ về việc ghi đè phương thức mô tả hoặc phương thức stringValue. Đó là thích hợp hơn và tại sao? Nguyên tắc duy nhất tôi có thể tìm thấy là in here nêu rõghi đè mô tả hoặc chuỗiValue trong ca cao?

Bạn không được khuyến khích mô tả quá mức.

Đây thực sự là những gì bạn sẽ đề xuất? Bất kỳ điểm ghi đè ưa thích nào khác?

+1

Liên kết của bạn là tài liệu cho Dữ liệu cốt lõi - bạn có muốn ghi đè phương pháp mô tả cho NSManagedObject hoặc một cái gì đó khác không? –

+0

Tôi không nghĩ vậy - đó là một phân lớp NSObject chứa dữ liệu cho một hộp giới hạn không gian và một số thao tác trên đó. Chuỗi mô tả về cơ bản là một danh sách được phân tách bằng dấu phẩy của các tọa độ bên trái và trên cùng bên trái. – mvexel

Trả lời

5

description là cách để đi, đó là những gì nó được gọi là cung cấp biểu diễn chuỗi của một đối tượng.

- (NSString*)description 
{ 
    return [NSString stringWithFormat:@"%@, %@; %@", a, b, c]; 
} 

Tôi cũng tin rằng cuốn sách của Hillegass cũng được đề xuất.

+0

cảm ơn, cũng vì lời nhắc Hillegass;) – mvexel

7

Tôi cá nhân ghi đè description trong hầu như tất cả các lớp con tôi tạo. Tôi đoán, giống như Tom Duckering viết trong bình luận của mình, rằng báo giá của bạn chỉ áp dụng cho các đối tượng được quản lý.

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"%@ <%p>", NSStringFromClass([self class]), self]; 
} 
2

Bạn cũng có thể ghi đè [NSObject debugDescription] được gọi bởi trình gỡ lỗi. Đó là những gì được gọi khi sử dụng "print to console" trong trình gỡ rối. Bạn cũng có thể gọi trực tiếp trong NSLog.

Theo mặc định trong hầu hết các lớp học debugDescription chỉ cần gọi description nhưng bạn có thể làm cho chúng trả về các chuỗi riêng biệt. Đó là một nơi tốt để tải đầu ra với các chi tiết.

Danh mục là nơi tốt để đỗ phương thức cho cả lớp học tùy chỉnh và các lớp hiện có của bạn. Điều này đặc biệt hữu ích vì bạn có thể bao gồm danh mục trong bản dựng gỡ lỗi nhưng loại trừ nó trong bản phát hành. Nếu không có danh mục, mã sẽ gọi phương thức lớp mặc định thay thế.

Tôi có một danh mục gỡ lỗi cho UIView để loại bỏ mọi thuộc tính mà tôi có thể nghĩ đến. Nếu tôi nhấn một lỗi khó chịu, tôi chỉ bao gồm danh mục và sau đó tôi có thể thấy mọi thứ về mọi chế độ xem ngay trong bảng điều khiển trình gỡ lỗi.

4

Để trả lời câu hỏi của bạn theo một hướng khác, stringValue hoàn toàn khác - nó không mô tả người nhận, đó là tài sản của nó. Tùy chỉnh description của bạn thậm chí có thể bao gồm stringValue hoặc trích đoạn nếu nó dài.

Sự khác biệt chính là stringValue thường là một thuộc tính có thể thay đổi (xem, ví dụ: NSControl), trong khi description luôn là thuộc tính bất biến, được tính theo yêu cầu.

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