- PVSM.RU - https://www.pvsm.ru -
Я часто пишу небольшие тестовые проекты на Objective-C, чтобы поэкспериментировать или поиграться с чем-нибудь. Обычно, я помещаю код в main.m и избавляюсь от всего остального:
#!/usr/bin/env objc-run
@import Foundation;
@implementation Hello : NSObject
- (void) sayHelloTo:name
{
printf("Hello %s, my address is %pn", [name UTF8String], self);
}
@end
int main ()
{
id hello = [Hello new];
[hello sayHelloTo:@"sunshine"];
}
Это полноценный проект из одного файла, готовый к выполнению. Под катом — описание приемов, позволивших прийти к данному минимализму.
brew install objc-run
и добавьте права на выполнение вашему исходному файлу: chmod u+x main.m@interface Я случайно узнал, что ObjC позволяет указывать суперкласс прямо в директиве @implementation. Не совсем понятно, с какой целью это допущено, но это позволяет полностью избавиться от блока @interface.-(id)doSomethingWith:(id)param; это абсолютно то же самое, что и -doSomethingWith:param; но второй вариант выглядит удобнее.void main () вместо int main (int argc, char**argv). Зачем это все объявлять, если вы все равно не пользуетесь этими аргументами?return в main(). Начиная со стандарта C99, при возвращении управления от main() без оператора возврата — считается, что было вызвано return 0;Примечание переводчика: при отсутствии @interface меня раздражает вывод warning:
/dev/fd/63:3:17: warning: cannot find interface declaration for 'Hello'
@implementation Hello : NSObject
^
1 warning generated.
Это warn_undef_interface, для которого нет соответствующего флага -W (для заглушения предупреждений по типам). Так что для себя я оставил пустой интерфейс.
#!/usr/bin/env objc-run
@import Foundation;
@interface Hello : NSObject
@end
@implementation Hello
- (void) sayHelloTo:name
{
printf("Hello %s, my address is %pn", [name UTF8String], self);
}
@end
int main ()
{
id hello = [Hello new];
[hello sayHelloTo:@"sunshine"];
}

Автор: BenderRodriguez
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/objective-c/73891
Ссылки в тексте:
[1] objc-run: https://github.com/iljaiwas/objc-run
[2] Источник: http://habrahabr.ru/post/242621/
Нажмите здесь для печати.