2009-02-22 31 views
5

Tôi có một lớp UIViewController giả định có tên là "foo". foo kế thừa từ thanh lớp và thanh lớp # "Lớp A" của lớp, một lớp mà foo sử dụng rộng rãi. Vấn đề là, khi tôi đang sử dụng một thể hiện của lớp A trong foo, tôi không nhận được bất kỳ lỗi trình biên dịch, nhưng tôi nhận được một cảnh báo ví dụ, rằng một thể hiện của Class A không đáp ứng với một phương pháp cụ thể. Tôi có phải rõ ràng # import ClassA.h vào lớp 'foo' không? mặc dù lớp foo mở rộng thanh kéo dài, đã nhập nó?Mục tiêu-C sử dụng #import và thừa kế

Hy vọng điều đó không quá khó hiểu. Hãy cho tôi biết nếu tôi cần phải làm rõ bất cứ điều gì.

+0

Lớp học không #import bất cứ thứ gì. Tệp #import các tệp khác. Vì vậy, câu hỏi là, bạn đang #importing những gì? –

Trả lời

12

Có vẻ như bạn có vấn đề phụ thuộc vòng tròn. Để giải quyết nó, có, mỗi tập tin imlementation (.m) cần phải #import tập tin tiêu đề thích hợp. Tuy nhiên, nếu bạn cố gắng có các tiêu đề tiêu đề#import lẫn nhau, bạn sẽ gặp sự cố.

Để sử dụng thừa kế, bạn cần phải biết kích thước của lớp cha, có nghĩa là bạn cần phải #import nó. Đối với những thứ khác, mặc dù, chẳng hạn như biến thành viên là con trỏ hoặc phương thức lấy tham số hoặc trả về loại khác, bạn không thực sự cần định nghĩa lớp, vì vậy bạn có thể sử dụng tham chiếu chuyển tiếp để giải quyết trình biên dịch lỗi.

// bar.h 
@class A; // forward declaration of class A -- do not to #import it here 

@interface bar : UIViewController 
{ 
    A *member; // ok 
} 

- (A) method:(A)parameter; // also ok 
@end 

// bar.m 
#import "bar.h" 
#import "A.h" 

// can now use bar & A without any errors or warnings 
Các vấn đề liên quan