Директивы компилятора 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

Используем OCMock не по назначению.

OCMock — фреймворк, предназначенный для тестирования приложений:
http://ocmock.org/

Кроме unit-тестов его можно использовать не по назначению, как альтернативу method swizzling.
Можно:
— подменить метод существующего объекта;
— создать объект некоторого класса и подменить в нем метод.
Нельзя заменить метод в …

Core Data + MagicalRecord. Пример работы с несколькими контекстами

Сначала инициализируем MagicalRecord. Создаем дочерний контекст и записываем в него что-нибудь, сохраняем в БД (после этого изменяется и родительский контекст).
Читаем из главного контекста, проверяем, что внесенные в дочерний контекст изменения появились в главном контексте.
Удаляем записи из дочернего контекста …

xCode. Сбросить параметры target

В проекте xCode при сборке проекта берутся параметры для target. Если такие не заданы, то берутся из настроек проекта, общих для всех targets. Соответственно любое изменеие опции в target перекроет общие настройки.

Для сброса настройки в исходное положение нужно выбрать …

Баг с UITableView в новом xCode

Добавляю простую таблицу с одной custom ячейкой на UIVIewController (в Storyboard), задаю делегаты, определяю required (обязательные) делегатные методы, добавляю autolayout constraints. Получаю:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell’s …

Неявное преобразование типов в Swift (implicit conversion)

Основная проблема Swift — это почти полное отсутствие неявного (implicit) приведения типов. Вы не сможете даже сложить 2 и 2.5 — целочисленное нужно будет привести к типу Double явно.

Также существует обходной путь — заставить приложение произвести действия над двумя …