Основные направления разработки с использованием HTTP Live Streaming для iOS (Перевод)

Источник:
https://developer.apple.com/streaming/

Отправляйте в реальном времени или предварительно закодированное аудио и видео на iPad, iPod touch и Mac с помощью обычного веб-сервера. Разработанное для мобильных устройств HTTP Live Streaming может динамически настраивать качество проигрываемого видео для того, чтобы соответствовать скорости …

OAuth и другие способы аутентификации в веб-приложениях

Источник:
http://habrahabr.ru/company/dataart/blog/262817/

Коротко об OAuth (например, gmail.com):
1)приложение запрашивает у пользователя разрешение на использование аккаунта gmail
2)пользователь дает разрешение приложению (разрешение == grant)
3)приложение обращается к серверу авторизации и обменивает grant и ключ авторизации (выдается при регистрации приложения) на token…

App Thinning (iOS, watchOS). Оптимизация приложений

App Store и операционная система оптимизируют установку iOS и watchOS приложений отдельно для каждого устройства, требуя минимальный объем занимаемой памяти. Эта оптимизация, названная app thinning (утоньшение приложения), позволяет вам создавать приложения, которые используют больше ососбенностей устройства, занимают меньше места и …

Горячие клавиши xCode

control+cmd+? (для ? может понадобиться shift) или option+click — всплывающая подсказка
control+option+cmd+/ или option+double click — открыть документацию по интересующему тексту

Остальное можно найти здесь:
http://iphonedev.tv/blog/2014/9/15/14-xcode-time-saving-shortcuts-memorize-and-improve-your-productivity…

Простое создание одновременных и последовательных анимаций

Когда используете animateWithDuration, то анимации постоянно конфликтуют между собой. А для одновременных анимаций проще всего делать «nested animations» (но при этом блоки animateWithDuration, вложены друг в друга).

Проблему решает библиотека RZViewActions:
https://github.com/Raizlabs/RZViewActions

Базируется на animateWithDuration, но при этом есть 3 …

Директивы компилятора Objective-C

Статья частично устарела, но может дать представление о различных директивах компилятора (начинающиеся со знака @):
http://itw66.ru/blog/obj_c/585.html

Что изменилось:
— @«string» называется литералом и с тех пор к нему добавлись массивы, словари, NSNumber и т.п.;
— категория не может добавлять переменных …

Как определить, поддерживает ли устройство на iOS эффект blur (размытие)?

Вариант 1. Требуется определить поддерживает ли устройство blur программно.
Решение:
http://stackoverflow.com/questions/19412094/how-can-i-detect-if-an-ios-device-supports-the-blur-effect

Код:

@interface UIDevice (Additions)

@property (readonly) NSString *platform;
@property (readonly) BOOL canBlur;

@end


@implementation UIDevice (Additions)

- (NSString *)platform {
    int mib[] = { CTL_HW, HW_MACHINE };
    size_t len 

Дочерний UIView блокирует срабатывание события TouchesBegan для родительского UIView

Суть проблемы — событие TouchesBegan срабатывает непосредственно на view, которого касается пользователь. У superview по умолчанию событие не срабатывает.
Ссылка на решение проблемы:
http://stackoverflow.com/questions/12811848/subview-blocking-parent-view-touchesbegan

Решение — в дочернем UIView нужно прописать следующий код:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [super touchesBegan:touches 

Почему нельзя использовать retainCount

Источники:
http://whentouseretaincount.com

retainCount is useless.

Более того — для объектов-констант xCode возвращает разные значения, например, для [NSNumber numberWithInt:1] и @»Foo».

Краткое содержание:
1)retainCount может изменяться при пропускании объекта через какое-либо системное API
2)возвращаемое значение может зависеть от специфики объектов
3)retainCount …

iOS. Разница между singleton для ARC и не-ARC

Источник:

https://github.com/IgorFedorchuk/objective-c-style-guide

Исходный код

#if __has_feature(objc_arc) // ARC Version

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname)	\
\
+ (classname *)sharedInstance\
{\
    static classname *shared##classname = nil;\
    static dispatch_once_t onceToken;\
    dispatch_once(&onceToken, ^{\
        shared##classname = [[self alloc] init];\
    });\
    return shared##classname;\
}

#else // Non-ARC Version