LLDB: Точки останова

Пример и памятка по основным командам LLDB для работы с breakpoint — точками останова.

Подробнее »

Опубликовано в LLDB Метки:

LLDB Памятка

Основные команды Terminal и начало работы в LLDB
Подробнее »

Опубликовано в LLDB

Вывод в консоль размера используемой памяти iOS Swift

Если в процессе разработки iOS приложения или любого другого приложения потребуется выяснить какое количество памяти используется в данный момент, то можно использовать следующую функцию:

Попробуем в деле нашу функцию. Только я использовал для удобного отображения размера памяти еще и разделитель триад из предыдущей статьи.

Выполним цикл, в котором сто раз создадим массив из случайного числа, а также каждый шаг цикла будем вызывать написанную нами функцию report_memory()

Моя консоль выглядит так:

 




 

Опубликовано в Iron ribbon Метки: ,

Разделитель триад в любых числовых значениях

Без долгих вступлений и СЕО-якорей — сразу к делу.
Для того чтобы добавить разделитель триад к любым числовым значениям нужно написать два расширения — одно для класса Formatter, а второе для числового типа, например Int или UInt32.

Подробнее »

Опубликовано в Iron ribbon Метки:

Память и autoreleasepool для циклов

Шаблон autoreleasepool используется в Swift при возврате объектов autorelease (созданных либо вашим кодом Objective-C, либо использованием классов Cocoa). autorelease в Swift функционирует так же, как в Objective-C. Для примера можно рассмотреть метод создания объектов NSImage / UIImage:

Если запустить из Инструментов Activity Monitor, то можно увидеть график использования памяти:

Но если вы сделаете это без autoreleasepool, вы увидите, что пиковое использование памяти выше:

 

Autoreleasepool позволяет вам явно управлять освобождением памяти, когда объекты autorelease деинициализирутся в Swift, так же, как и в Objective-C.

Примечание. При работе с объектами Swift вы, как правило, не будете получать объекты autorelease. Вот почему в начале статьи упоминается оговорка о том, что это нужно только при «работе с Objective-C». Но если вы имеете дело с объектами Objective-C (включая классы Cocoa), они могут быть объектами autorelease, и в этом случае это Swift-представление шаблона Objective-C @autoreleasepool по-прежнему полезно.




Опубликовано в Памятка Метки:

Полезности для перечитывания

FlatMap против nil

Если функция (метод или инициализатор) может вернуть nil, а мы будем использовать эту функцию в качестве преобразователя в .map, то можно сразу отсеять элементы nil и вернуть не опциональные элементы

Вызовы Event.init могут вернуть nil, а flatMap на этих объектах удалит любые значения nil, поэтому на выходе мы получим объекты Event (не опциональные!)

Лог потоков

Вывод в консоль лога по потокам:

Консоль:




Reduce для Observable

Reduce (_: _ 🙂 создает сводное (накопленное) значение только тогда, когда завершается исходный наблюдаемый. Применение этого оператора к последовательностям, которые никогда не завершатся, не испускает ничего. Это частый источник путаницы и скрытых проблем

Опубликовано в Памятка Метки:

Обработка ошибок в Swift

Зачем все это нужно?

Обработка ошибок во время выполнения программы и самое главное — реакция приложения на эти ошибки — это хорошая практика для любого программного продукта. Согласитесь, если вы пользуетесь приложением и в какой-то момент оно без каких либо видимых проявлений «падает»,  — что вы подумаете  про разработчика? Думается — ничего хорошего. А ведь можно в коде добавить обработчики ошибок, и в читабельном формате сообщать пользователю что именно пошло не так. С одной стороны — это значительно повышает юзабилити приложения, с другой облегчает отладку при разработке.

Однако, ошибки не всегда нужно обрабатывать. Языковые функции  Swift позволяют избежать некоторых ошибок в целом. Как правило, если вы можете избежать возникновения ошибки, возьмите именно этот путь проектирования и разработки мобильного приложения iOS. Но если вы не можете избежать потенциального условия появления ошибки, то явная обработка — лучший вариант.

 

В этой статье я составлю памятку по работе с ошибками на языке программирования  Swift 3

Подробнее »

Опубликовано в Без категории

Тернарный условный оператор и оператор ??

Тернарный условный оператор

Проверку на выполнение условий можно записать со помощью условного оператора if else

Тут все просто — если батарейки сели — нужно их заменить, а если они в порядке — то можно и  использовать. Эту конструкцию можно записать в одну строку.

Эти два выражения абсолютно равнозначны.

Оператор ??

Оператор ?? применяется к опциональному значению optional, и если оно извлекается то в result вернется извлеченное значение. А если значение не извлекается, т.е. оно равно nil, то вернется значение defaultValue. Это сокращение следующей конструкции

 



Опубликовано в Iron ribbon, Фундаментальные основы Метки:

URL Schemes или как передать данные между iOS приложениями

Думаю, все разработчики мобильных iOS приложений в курсе, что из собственного приложения можно запускать сторонние приложения. Например можно запустить клиент Youtube, кликнув на ссылку на видео, или вызвать почтовый клиент если нажать на кнопку «написать письмо». В конце концов — самый банальный пример — это открытие браузера при нажатии на гиперссылку. Подобное поведение реализуется путем добавления и настройки URL-схем в приложение. Более того, при помощи этого инструмента можно в операционной системе iOS зарегистрировать собственную URL-схему и использовать ее для передачи данных: т.е. реализовать запуск своего приложения из других приложений с заданными параметрами.

Подробнее »

Опубликовано в Реальные примеры, Уроки, Фундаментальные основы Метки: ,

LoadError — cannot load such file — nanaimo

LoadError — cannot load such file — nanaimo

Если при попытка установить какой либо pod у вас терминал выдает такую ошибку, то вот рецепт для ее устранения:

Удалить nanaimo

gem list | grep nanaimo //увидим nanaimo (0.2.3, 0.2.2)
sudo gem uninstall nanaimo -v 0.2.2

sudo gem uninstall nanaimo -> all
sudo gem install nanaimo
pod install -> наслаждайтесь. Все работает

 

 

Опубликовано в Iron ribbon Метки:
Сайт размещается на хостинге Спринтхост