Pull to refresh

Comments 27

Очень качественный и удобный джентельменский набор! Благодарю вас)
Еще не программировал под iOS, но всё равно спасибо!
Колоссальный и полезный труд.
Вот бы так все разрабочики и компании делали при смене/прекращении деятельности, а не прятали полезные наработки гнить в дальний угол жестких дисков.
UFO landed and left these words here
Если автор под вебом понимает нечто серьезное, то его можно понять. Но если же имеется ввиду всякие там css, js, php, то это явно шаг назад. Отсюда и вопрос.
В профиле автора написанно, что RoR. NayZaK, это шаг назад?
Friend_LGA 20, спасибо за статью.
Опять же смотря что делать на этих рельсах. Но в целом пять лет воевать с xcode, вникать в тонкости obj-c, изучать эпловские фрэймворки, бороться за каждый мегабайт памяти, за отсутствие лагов и падений, продумывать архитектуру приложения, чтобы вот так вот взять и метнуться на рельсы? Странно это. Я к тому, что человек долгое время изучал инструмент и приучал себя к оптимизациям, а теперь внезапно рельсы. Они-то уж точно не про оптимизацию. Ровно как и другие вебовские приблуды для скриптовых языков.
Серверный код, который обслуживает миллионы пользователей может быть интереснее с архитектурной точки зрения. Особенно, если objc и клиентская разработка банально надоела.
Если это действительно кому-то интересно, то постараюсь сформулировать…
Работа для меня (по крайней мере сейчас) — это скорее способ саморазвития и поиска себя. Когда я начал заниматься iOS, мобильный рынок, впрочем как и сейчас, был очень быстрорастущим и хотелось ухватить свой кусок пирога. Но оказалось, что все не так просто, как казалось. Если брать в расчет чисто мобильное приложение, без какого-либо бэкграунда, то что это может быть? Игра или оффлайн-приложение типа «купи батон». Да, таких много, и встречаются действительно поражающие экземпляры, например как «Flappy Bird», но это скорее исключение из правил. Поработав в индустрии, ко мне пришло понимание, что если делать что-то серьезное, то мобильное приложение это скорее дополнение, компаньон, для внешнего сервиса. А внешний сервис это что? В основном это веб сайты. Поэтому решил идти глубже и изучать веб.
Почему Ruby on Rails? Ну… в нашем городе не сказать чтобы очень большой выбор, а поработать в команде со знающими людьми, это уже не плохое подспорье. Все равно главное — это понять суть, внутреннее устройство, как связываются между собой frontend и backend, а рельсы это просто инструмент, коих много, и чтобы выбрать то что нравится нужно пробовать.
Не претендую на истину в последней инстанции, все что сказал выше это мое ИМХО, прошу не принимать сильно близко к сердцу.
Пожалуйста, пользуйтесь на здоровье! :)
  • В LGDrawer какой-нибудь билдер бы, чтобы простые фигуры можно было сконфигурировать всего парой параметров, а остальные были бы по-умолчанию нулями. Легко было бы добавлять новые настройки фигур, не меняя весь пользовательский код.
  • Вместо __attribute__((unavailable)) наверное стоило бы заюзать NS_DESIGNATED_INITIALIZER
  • NS_ENUM для красоты
  • if (_type == LGPlaceholderViewTypeText) {… } else if (_type == LGPlaceholderViewTypeActivityIndicator) { ...} else if ...
  • /** Do not forget about weak referens to self */ – а на не self значит можно болт забить? от этого «self» у меня аж болит всё
  • cornerRadius+masksToBounds+shadowOffset с анимациями очень плохо влияют на производительность
  • — (UIView *)leftView { return _leftView; } – почему не readonly property?
  • animateStandart… -> animateStandard
В LGDrawer пытался по началу делать несколько методов с разным количеством параметров, но в итоге мозг совсем запутался, какие параметры нужны больше, какие меньше, в итоге плюнул и оставил только общие конструкторы. Хотя я с вами согласен, выглядит немного громоздко.

Насчет «switch — case» коллеги пинают уже не первый год, но все никак не могу постичь дзен и начать его использовать, спасибо за очередной пинок :)
/** Do not forget about weak referens to self */ – а на не self значит можно болт забить? от этого «self» у меня аж болит всё

Не совсем понял… Когда блок задан как strong, то если мы внутри него обратимся к self — получим retain cycle. Чтобы этого избежать нужно делать как-то так:
__weak typeof(self) wself = self;
block = ^(void)
{
    if (wself)
    {
        __strong typeof(wself) self = wself;

        ...
    }
};

cornerRadius+masksToBounds+shadowOffset с анимациями очень плохо влияют на производительность

Конечно нужно использовать с умом. Но в целом для современных девайсов все не так критично как раньше.

Насчет остального спасибо, учту, в ближайшее время постараюсь исправить
— (UIView *)leftView { return _leftView; } – почему не readonly property?

Ну по большому счету разницы особой нет. Не помню уже точно, но вроде бы, если глобально и приватно объявляешь одинаковые переменные с разными классами, вылезают варнинги.
Не совсем понял… Когда блок задан как strong, то если мы внутри него обратимся к self — получим retain cycle. Чтобы этого избежать нужно делать как-то так:

Это конечно да, просто retain цикл можно не только из-за self получать; так-же как можно использовать self внутри блока без weak ссылки и не получить утечек памяти
Отличная подборка! Спасибо!

А можно в LGSharing добавить инстаграм еще?
Пожалуйста!
Насчет LGSharing — как я уже писал в статье, от iOS разработки я отошел и сейчас занимаюсь вебом, поэтому времени добавлять новый функционал сейчас у меня нет, готов только править критичные баги. Но pull-request'ы на гитхабе приветствуются :)
Занимаюсь разработкой только год… Это прекрасная подборка Ваших наработок. Большое спасибо!
Пожалуйста, удачи вам на этом тернистом пути! :)
Спасибо! Мы вот с веба в iOs :) Про веб не забываем, правда!
Спасибо за шаринг, рекомендую Вам поделиться вашими подсами на Cocoa Controls :) Распиарите так свой гитхаб, например :)
Спасибо за совет, обязательно им воспользуюсь!
UIRefreshControl теперь из коробки работает с коллекшен вью.
Sign up to leave a comment.

Articles