Путаница в определении класса С - PullRequest
5 голосов
/ 27 марта 2009

Я изучаю Objective-C через какао (и мне это нравится). Я следую за учебником. Есть класс под названием Menu, и интерфейс выглядит примерно так.

@interface Menu: MenuObject {}
@end

@interface MenuLayer : LayerObject {}
-(void) someMethod:(id)sender
-(void) someOtherMethod:(id)sender
@end

и реализации следуют тому же соглашению

@implementation Menu
    -(id)init{
        // blah blah blah
    }
@end

@implementation MenuLayer
    // init, someMethod and someOtherMethod stuff here
@end

Что для меня выглядит как два отдельных объекта / класса, которые определены и реализованы в одних и тех же файлах. Есть ли причина для этого? Будет ли результат таким же, если я разделю файлы .h и .m на Menu.h / .m и MenuLayer.h / .m? Или я неправильно понимаю что-то фундаментальное?

Ответы [ 3 ]

5 голосов
/ 27 марта 2009

Хорошо, если вы разделите их на отдельные файлы. В большинстве случаев, когда вы видите, что вещи реализованы таким образом, это просто потому, что 2 класса настолько тесно связаны друг с другом, что вы действительно никогда не будете использовать один без другого.

Итак, это действительно просто стиль. Нет никакого «волшебства» в том, что они оба определены и реализованы в одном файле.

3 голосов
/ 27 марта 2009

Это просто вопрос личных предпочтений. Вы должны быть в состоянии разделить их, если вы #import один из заголовков от другого, если это необходимо. Objective-C просто дает вам возможность группировать классы вместе в файлах, а не Java, что заставляет вас разделять их. Если классы тесно связаны, может быть проще увидеть, как все это работает в одном файле, вместо того, чтобы переключаться между несколькими.

1 голос
/ 27 марта 2009

Ваша оценка верна. Два отдельных класса объявляются и определяются.

Вероятная причина для этого состоит в том, что оба класса необходимы для того, чтобы делать то, что делает Menu. Наличие обоих классов в одном заголовке и источнике делает интерфейс более компактным.

Разделение его на два файла все равно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...