Pull to refresh

Comments 19

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

То есть, если у вас заголовочный файл — вы подключаете через #import только тот класс, от которого наследуетесь (или, соответственно, протоколы, которые реализуете), а все классы, которые принимает или возвращает ваш объект, определяете через @class.

В файле реализации, соответственно, подключаются те заголовки, которые реально используются в коде.
UFO just landed and posted this here
Наверное, когда автор программы пытается мучительно придумать имя своему новому классу?
UFO just landed and posted this here
Не знаю, на Java не писал. Но вот могу сказать, что в HTML-верстке придумать осмысленное имя классу иногда сложно )))
UFO just landed and posted this here
О гипотетических. Пытался объяснить необходимость пакетов, наверное, не очень ясно написал.
При совпадении имен классов иногда получается интересное поведение. Проиложение собирается и даже запускается. Но при старте в консоль выдает, что есть два класса с одинаковым именем и какой будет использован незнает.
Приходящим из мира Java и автору очень рекомендую почитать данный документ:
developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.pdf
Данные принципы именования сложились уже давно и желательно их придерживаться.

В отличие от Java (<irony>в которой принято все подряд начинать с get</irony>), в Objective-C префикс-глагол «get…» используется для косвенного получения данных (для одного или нескольких значений).

Например, у NSData есть метод:

-(void)getBytes:(void *)buffer length:(NSUInteger)length

Он не возвращает байты напрямую (метод является void), а записывает их по ссылке в buffer.

В вашем случае код Feature должен выглядеть как-то так:

@interface Feature: NSObject
-(Profile *)profileWithName:(NSString*)name;
@end

PS. Прошу прощения за отсутствие форматирования.
Полезный комментарий, спасибо
(Лирическое отступление) Кстати, в Java именно с этим проблемы. Спецификацией четко не определено, что должен возвращать метод
List getSomeList() {
return someList;
}

— ссылку на someList (чаще всего так и делают)
— unmodifiable wrapper для someList
— копию someList
При отсутствии в Java явных ссылок большинство кодеров не видят и не понимают различий (какая ссылка? мне же вернули сам объект!). А потом вылезают трудно отловимые ошибки с concurrent modification и immutability.
«Можно вызывать любой ранее определенный метод любого класса (но если метод не определен — нельзя)...»
Как бы можно:

id someObject;
[someObject performSelector:@selector(anySelectorYouCanImagine)];
Вы правы, но я хотел показать как компилятор нам помогает, а не как его обмануть.
UFO just landed and posted this here
Спасибо, интересный момент!
Мне понравилась эта статья больше чем предыдущая, хоть и пишу на Objective-C уже давно, читать было все равно интересно!
Как структурировать классы, если нет пакетов? Все классы проекта должны быть в одном месте? О_о.
Не обязательно, файлы можно разбросать как угодно, просто надо правильно сделать сборку. Все как в С. Пространство имен не обязательно определяет структуру файлов проекта и наоборот.
Sign up to leave a comment.

Articles