Предположим, у меня есть класс BaseClass в BaseClass.h . Я хочу создать SubClass и унаследовать его от моего BaseClass , так просто. НО я хочу сделать наследование в интерфейсе SubClass.
// SubClass.h
//#import "BaseClass.h" -I dont want to make import to the header (Better convention - I think so).
//@class BaseClass; - That will work only for declaring an instance/property.
@interface SubClass : BaseClass{
}
Я также хотел бы сохранить оба класса в отдельных файлах. Есть ли у меня простое / элегантное решение, например, для группировки моих классов в проекте Xcode, чтобы они могли узнавать друг друга.
3 ответа
//#import "BaseClass.h"
Раскомментируйте эту строку. Вы должны импортировать заголовок суперкласса, чтобы сделать его его подклассом. Я не понимаю, что вы возражали против этого.
#import
не является #include
. Это предотвращает цикличность.
@class
, а не #import. Это экономит незначительное количество времени компиляции и, в очень сложных сценариях, позволяет избежать проблем с порядком включения. Но в качестве общей стратегии оно того не стоит. И вы не можете избежать включения .h, если вы объявляете фактическую переменную типа класса (вместо указателя), ссылаетесь на метод класса или создаете подкласс класса. Это справедливо как для C++, так и для Objective-C.
Вы должны импортировать суперкласс, в противном случае ваш подкласс не имеет ссылки на то, что строить. В вашем subclass.h вы должны #import "BaseClass.h"
. У вас не должно быть проблем с циклическим включением, потому что #import
использует защиту заголовков для решения этой проблемы.
В проекте xcode есть один файл, известный как файл .pch. В этот файл вы можете импортировать файлы заголовков. После этого нет необходимости импортировать и другие файлы заголовков. Но убедитесь, что импортируемый файл используется во всех файлах.
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.
UIKit
из заголовка MyView, и все по-прежнему будет работать. Почему? Поскольку файл .pch импортируетUIKit
, и, следовательно, все остальное импортирует его неявно.