2009-05-23 26 views
8

Tôi có một lớp chuyển tiếp rất thẳng với hầu hết các thuộc tính kiểu NSString. Trong đó, tôi đã viết một triển khai tầm thường của phương thức mô tả. Tôi thấy rằng bất cứ khi nào tôi cố gắng bao gồm "tự" trong phần mô tả, nó sẽ làm hỏng ứng dụng iPhone của tôi. Ví dụ là một cái gì đó như sau:Không thể bao gồm "tự" trong phương pháp mô tả Mục tiêu-C?

- (NSString *)description 
{ 
    NSString *result; 

    result = [NSString stringWithFormat:@"me: %@\nsomeVar: %@", self, self.someVar]; 

    return result; 
} 

Ngay sau khi tôi xóa tham số đầu tiên thành chuỗi định dạng, tự, nó hoạt động như mong đợi.

Trả lời

30

Sử dụng %p cho self, sau đó nó sẽ hiển thị địa chỉ self. Nếu bạn sử dụng %@, thì nó sẽ gọi description trên self, sẽ thiết lập một lần đệ quy vô hạn.

6

Bạn nhận ra rằng thiết lập một đệ quy vô hạn.

Việc triển khai description của bạn hoàn toàn tự gọi khi bạn đi qua số self, sau đó tự gọi chính nó, v.v.

Tai nạn của bạn hầu như có khả năng là do không gian ngăn xếp cạn kiệt ... một "stackoverflow" nếu bạn muốn. Phù hợp xem xét trang web :-)

12

Bạn có thể sử dụng [siêu mô tả] thay vì tự để tránh đệ quy vô hạn, như vậy:

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"%@: %@", [super description], [self someVar]]; 
} 
Các vấn đề liên quan