Комментарии 30
Вы это серьезно на счет макросов?.. facepalm.jpg
1. Пишите код, выделяете его и перетаскиваете в окошечко справа, предварительно выбрав там CodeSnippets
2. Задаете параметры для вашего сниппета
3.…
4. Profit!!1
1. Пишите код, выделяете его и перетаскиваете в окошечко справа, предварительно выбрав там CodeSnippets
2. Задаете параметры для вашего сниппета
3.…
4. Profit!!1
+5
Полезно, спасибо. Но макросы могут быть удобнее в других задачах.
0
Вот именно что в других!
0
Выбранный вами подход значит постоянное повторение кода.
Макросы же решают одну задачу все время одинаково в рамках одного проекта.
Макросы же решают одну задачу все время одинаково в рамках одного проекта.
+1
Сниппеты позволяют мне не тратить время на многочисленные drawRect, layoutSubviews и т.п., при чем во всех проектах, а макросы нужно подключать во все проекты, подключать хедеры, в общем кучу лишних телодвижений, ради того чтобы кагбы упростить себе жизнь.
Я считаю что подход с макросами имеет место быть, но вариант со сниппетами более гибкий и удобный.
Я считаю что подход с макросами имеет место быть, но вариант со сниппетами более гибкий и удобный.
0
все-таки когда можно обойтись макросом или функцией — это лучше сгенеренного кода. Менять потом проще.
0
[array objectAtIndex:0] => array[0];
array[0] = @«5»;
Вот эта штука (и для nsdictionary тоже) будет работать начиная в ios 6+
Плюс, категорически не согласен с заменой типов, какая-то Java получилась. Остальное ок.
array[0] = @«5»;
Вот эта штука (и для nsdictionary тоже) будет работать начиная в ios 6+
Плюс, категорически не согласен с заменой типов, какая-то Java получилась. Остальное ок.
0
Вот эта штука (и для nsdictionary тоже) будет работать начиная в ios 6+
Нет. Будет работать и в младших версиях.
+2
Нет, будет. Просто проверьте.
+3
Хм. Сработало. Когда смотрел доки, сразу полез в хедеры увидел, что objectAtIndexedSubscript: доступен с 6.0. Проверять не стал, зря.
Признаю неправоту. Другой вопрос — есть ли у этого добра минимальная версия? Или оно при невозможности вызова objectAtIndexedSubscript вызывает objectAtIndex?
Признаю неправоту. Другой вопрос — есть ли у этого добра минимальная версия? Или оно при невозможности вызова objectAtIndexedSubscript вызывает objectAtIndex?
+1
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Не забывайте, что параметрами макросов могут быть выражения, поэтому в самих макросах надо их оборачивать в скобки.
Например, в этом макросе:
если я вызову его так:
получится черт-те-что.
Поэтому, надо переписать его так (обратите внимание, что
Ну, и, с остальными макросами та же беда.
Например, в этом макросе:
#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]
если я вызову его так:
RGB(shift+r, shift+g, shift+b)
получится черт-те-что.
Поэтому, надо переписать его так (обратите внимание, что
colorWithRed:green:blue:alpha:
принимает не double
, а CGFloat
):#define RGB(r, g, b) [UIColor colorWithRed:(r)/255.f green:(g)/255.f blue:(b)/255.f alpha:1.f]
Ну, и, с остальными макросами та же беда.
+4
Ну и есть еще одна проблема, если передать в макрос что-то типа i++, а макрос наш кривой и подставит эту переменную два раза, то на выходе будет совсем не то чего мы хотели. Для того чтобы этого избежать, нужно создавать локальные переменные, и задавать им переданные макросу значения.
+2
Имхо, вместо ViewWidth ViewHeight гораздо удобнее категории:
— (CGFloat)width
{
return self.size.width;
}
— (void)setWidth:(CGFloat)width
{
CGRect newFrame = self.frame;
newFrame.size.width = width;
self.frame = newFrame;
}
— (CGFloat)height
{
return self.size.height;
}
— (void)setHeight:(CGFloat)height
{
CGRect newFrame = self.frame;
newFrame.size.height = height;
self.frame = newFrame;
}
И т.п.
Я все свои вспомогательные штуки собрал в github.com/pilot34/P34Utils, может кому-то еще что-то удобно будет позаимствовать. Поключается как CocoaPod.
{
return self.size.width;
}
— (void)setWidth:(CGFloat)width
{
CGRect newFrame = self.frame;
newFrame.size.width = width;
self.frame = newFrame;
}
— (CGFloat)height
{
return self.size.height;
}
— (void)setHeight:(CGFloat)height
{
CGRect newFrame = self.frame;
newFrame.size.height = height;
self.frame = newFrame;
}
И т.п.
Я все свои вспомогательные штуки собрал в github.com/pilot34/P34Utils, может кому-то еще что-то удобно будет позаимствовать. Поключается как CocoaPod.
+3
Ага, и каждый новый девелопер, вынужденный работать с Вашим кодом, будет обязан выучить макросы. И это я еще не говорю о возможных name conflicts из-за имен макросов и переопределений типов без префиксов.
0
Когда они упростят уже [NSString stringWithFormat:@«sound%d.mp3», pageNumber];
до чего-то типа @{"%d",pageNumber}? (Уж не знаю как лучше скобки ставить в данном примере)
до чего-то типа @{"%d",pageNumber}? (Уж не знаю как лучше скобки ставить в данном примере)
0
Т.к. меня упомянули в самом посте, пришлось в README.markdown примеры написать, совесть заела :)
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Улучшаем производительность труда. Макросы и литералы objective-c