6. Контекст блока3. переменные – указатели на объекты с подсчетом ссылок (id, NSObject) NSDate* date = [ [ NSDate alloc ] init ]; void(^printDate)() = ^() { NSLog( @"date: %@", date ); }; //копируем блок в кучу printDate = [ [ printDatecopy ] autorelease ]; [ date release ]; printDate();
7. Контекст блока4a. управление памятью NSDate* date = [ [ NSDate alloc ] init ]; //создаем блок в стеке void(^printDate)() = ^() { NSLog( @"date: %@", date ); }; [ date release ]; //копируем блок в кучу и падаем printDate = [ [ printDatecopy ] autorelease ];
8. Контекст блока4b. управление памятью __blockNSDate* date = [ [ NSDatealloc ] init ]; void(^printDate)() = ^() { //здесь падаем при обращении к date NSLog( @"date: %@", date ); }; //копируем блок в кучу, для объекта dateretain не вызывается printDate= [ [ printDatecopy ] autorelease ]; [ date release ]; printDate();
10. Блоки и управление памятью2. block как результат функции -(JFFSimpleBlock)example { return [ [ ^ { NSLog( @"test" ); } copy ] autorelease ]; }
11. Блоки и управление памятью3. Виды блоковых объектов Глобальные- без состояния Локальные- в стеке Malloc- Блоки в куче Ios < 4.0 support: PLBlocks- googlecode ESBlocksRuntime–github
14. БлокиBest practice 1. Работа с контейнерами на примере NSArray 2. Охраняющиевыражения -guards 3. Отложенные вызовы: onDeallocBlock Scheduled operations 4. Блоки вместо делегатов в UIAlertView
29. Обобщенное асинхронное программирование 1. Асинхронная операция в общем виде 2. Кеширование 3. Порядок выполнения Дерево зависимостей, login Lazy load, вычитка страниц 4.Load balancer 5. Асинхронные операции в контексте сессии 6. Асинхронные операции в UI
30. Асинхронная операция в общем виде CancelBlock(^AsyncOperation) ( ProgressHandler , CancelHandler , FinishHandler) { … };