Как стать автором
Обновить

Комментарии 19

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

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

В файле реализации, соответственно, подключаются те заголовки, которые реально используются в коде.
Пришлось два раза читать, чтоб всё уловить.
НЛО прилетело и опубликовало эту надпись здесь
Наверное, когда автор программы пытается мучительно придумать имя своему новому классу?
НЛО прилетело и опубликовало эту надпись здесь
Не знаю, на Java не писал. Но вот могу сказать, что в HTML-верстке придумать осмысленное имя классу иногда сложно )))
НЛО прилетело и опубликовало эту надпись здесь
О гипотетических. Пытался объяснить необходимость пакетов, наверное, не очень ясно написал.
При совпадении имен классов иногда получается интересное поведение. Проиложение собирается и даже запускается. Но при старте в консоль выдает, что есть два класса с одинаковым именем и какой будет использован незнает.
Приходящим из мира 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)];
Вы правы, но я хотел показать как компилятор нам помогает, а не как его обмануть.
НЛО прилетело и опубликовало эту надпись здесь
Спасибо, интересный момент!
Мне понравилась эта статья больше чем предыдущая, хоть и пишу на Objective-C уже давно, читать было все равно интересно!
Как структурировать классы, если нет пакетов? Все классы проекта должны быть в одном месте? О_о.
Не обязательно, файлы можно разбросать как угодно, просто надо правильно сделать сборку. Все как в С. Пространство имен не обязательно определяет структуру файлов проекта и наоборот.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории