🗊 Презентация Objective-C Блоки (Block)

Категория: Авто/мото
Нажмите для полного просмотра!
Objective-C Блоки (Block), слайд №1 Objective-C Блоки (Block), слайд №2 Objective-C Блоки (Block), слайд №3 Objective-C Блоки (Block), слайд №4 Objective-C Блоки (Block), слайд №5 Objective-C Блоки (Block), слайд №6 Objective-C Блоки (Block), слайд №7 Objective-C Блоки (Block), слайд №8 Objective-C Блоки (Block), слайд №9 Objective-C Блоки (Block), слайд №10 Objective-C Блоки (Block), слайд №11 Objective-C Блоки (Block), слайд №12 Objective-C Блоки (Block), слайд №13 Objective-C Блоки (Block), слайд №14 Objective-C Блоки (Block), слайд №15 Objective-C Блоки (Block), слайд №16 Objective-C Блоки (Block), слайд №17 Objective-C Блоки (Block), слайд №18 Objective-C Блоки (Block), слайд №19 Objective-C Блоки (Block), слайд №20 Objective-C Блоки (Block), слайд №21 Objective-C Блоки (Block), слайд №22 Objective-C Блоки (Block), слайд №23 Objective-C Блоки (Block), слайд №24 Objective-C Блоки (Block), слайд №25 Objective-C Блоки (Block), слайд №26 Objective-C Блоки (Block), слайд №27 Objective-C Блоки (Block), слайд №28 Objective-C Блоки (Block), слайд №29 Objective-C Блоки (Block), слайд №30 Objective-C Блоки (Block), слайд №31 Objective-C Блоки (Block), слайд №32 Objective-C Блоки (Block), слайд №33 Objective-C Блоки (Block), слайд №34 Objective-C Блоки (Block), слайд №35 Objective-C Блоки (Block), слайд №36 Objective-C Блоки (Block), слайд №37 Objective-C Блоки (Block), слайд №38 Objective-C Блоки (Block), слайд №39 Objective-C Блоки (Block), слайд №40 Objective-C Блоки (Block), слайд №41

Содержание

Вы можете ознакомиться и скачать презентацию на тему Objective-C Блоки (Block). Доклад-сообщение содержит 41 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Objective-C Блоки (Block)
Описание слайда:
Objective-C Блоки (Block)

Слайд 2


Тип и литерал блока typedef int (^MyBlock)(int); int multiplier = 7; MyBlock myBlock = ^(int num) { return num * multiplier; }; ИЛИ int multiplier =...
Описание слайда:
Тип и литерал блока typedef int (^MyBlock)(int); int multiplier = 7; MyBlock myBlock = ^(int num) { return num * multiplier; }; ИЛИ int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; };

Слайд 3


Вызов блока { ... myBlock( 3 ); //или if ( myBlock ) myBlock( 3 ); } Результат: 21
Описание слайда:
Вызов блока { ... myBlock( 3 ); //или if ( myBlock ) myBlock( 3 ); } Результат: 21

Слайд 4


Контекст блока 1. примитивные типы int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; }; multiplier = 8; NSLog(...
Описание слайда:
Контекст блока 1. примитивные типы int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; }; multiplier = 8; NSLog( @"%d", myBlock( 3 ) ); Печатает: 21

Слайд 5


Контекст блока 2. ключевое слово __block __block int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; }; multiplier = 8;...
Описание слайда:
Контекст блока 2. ключевое слово __block __block int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier; }; multiplier = 8; NSLog( @"%d", myBlock( 3 ) ); Печатает: 24

Слайд 6


Контекст блока 3. переменные – указатели на объекты с подсчетом ссылок (id, NSObject) NSDate* date = [ [ NSDate alloc ] init ]; void (^printDate)() =...
Описание слайда:
Контекст блока 3. переменные – указатели на объекты с подсчетом ссылок (id, NSObject) NSDate* date = [ [ NSDate alloc ] init ]; void (^printDate)() = ^() { NSLog( @"date: %@", date ); }; //копируем блок в кучу printDate = [ [ printDate copy ] autorelease ]; [ date release ]; printDate();

Слайд 7


Контекст блока 4a. управление памятью NSDate* date = [ [ NSDate alloc ] init ]; //создаем блок в стеке void (^printDate)() = ^() { NSLog(...
Описание слайда:
Контекст блока 4a. управление памятью NSDate* date = [ [ NSDate alloc ] init ]; //создаем блок в стеке void (^printDate)() = ^() { NSLog( @"date: %@", date ); }; [ date release ]; //копируем блок в кучу и падаем printDate = [ [ printDate copy ] autorelease ];

Слайд 8


Контекст блока 4b. управление памятью __block NSDate* date = [ [ NSDate alloc ] init ]; void (^printDate)() = ^() { //здесь падаем при обращении к...
Описание слайда:
Контекст блока 4b. управление памятью __block NSDate* date = [ [ NSDate alloc ] init ]; void (^printDate)() = ^() { //здесь падаем при обращении к date NSLog( @"date: %@", date ); }; //копируем блок в кучу, для объекта date retain не вызывается printDate = [ [ printDate copy ] autorelease ]; [ date release ]; printDate();

Слайд 9


Блоки и управление памятью 1. отложенный вызов void (^printDate)() = ^() { NSLog( @”Hello ” ); }; //добавление в контейнер printDate = [ [ printDate...
Описание слайда:
Блоки и управление памятью 1. отложенный вызов void (^printDate)() = ^() { NSLog( @”Hello ” ); }; //добавление в контейнер printDate = [ [ printDate copy ] autorelease ]; [ NSMutableArray arrayWithObject: printDate ]; self.simpleBlock = printDate; //всегда копируем block property @property ( copy ) JFFSimpleBlock simpleBlock;

Слайд 10


Блоки и управление памятью 2. block как результат функции -(JFFSimpleBlock)example { return [ [ ^ { NSLog( @"test" ); } copy ] autorelease...
Описание слайда:
Блоки и управление памятью 2. block как результат функции -(JFFSimpleBlock)example { return [ [ ^ { NSLog( @"test" ); } copy ] autorelease ]; }

Слайд 11


Блоки и управление памятью 3. Виды блоковых объектов Глобальные - без состояния Локальные - в стеке Malloc - Блоки в куче Ios < 4.0 support: PLBlocks...
Описание слайда:
Блоки и управление памятью 3. Виды блоковых объектов Глобальные - без состояния Локальные - в стеке Malloc - Блоки в куче Ios < 4.0 support: PLBlocks - googlecode ESBlocksRuntime – github

Слайд 12


Управление памятью и Блоки
Описание слайда:
Управление памятью и Блоки

Слайд 13


Automatic Reference Counting No copy, release and autorelease
Описание слайда:
Automatic Reference Counting No copy, release and autorelease

Слайд 14


Блоки Best practice 1. Работа с контейнерами на примере NSArray 2. Охраняющие выражения - guards 3. Отложенные вызовы: onDeallocBlock Scheduled...
Описание слайда:
Блоки Best practice 1. Работа с контейнерами на примере NSArray 2. Охраняющие выражения - guards 3. Отложенные вызовы: onDeallocBlock Scheduled operations 4. Блоки вместо делегатов в UIAlertView

Слайд 15


NSArray concurrent enumerate NSArray* arr_ = [ NSArray arrayWithObjects: @"1" , @"2” , @"3” , nil ]; [arr_...
Описание слайда:
NSArray concurrent enumerate NSArray* arr_ = [ NSArray arrayWithObjects: @"1" , @"2” , @"3” , nil ]; [arr_ enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^( id obj_ , NSUInteger idx_ , BOOL* stop_) { NSLog( @"start process: %@", obj_ ); sleep( 4 ); NSLog( @"stop process: %@", obj_ ); } ];

Слайд 16


NSArray Строгая типизация vs NSPredicate NSArray* array_ = [ NSArray arrayWithObjects: @"1" , @"2" , @"3" , nil ]; [...
Описание слайда:
NSArray Строгая типизация vs NSPredicate NSArray* array_ = [ NSArray arrayWithObjects: @"1" , @"2" , @"3" , nil ]; [ array_ indexOfObjectPassingTest: ^( id obj_ , NSUInteger idx_ , BOOL* stop_) { NSString* element_ = obj_; return [ element_ isEqualToString: @"2" ]; } ];

Слайд 17


JFFLibrirary’s NSArray расширения JFFLibrirary github +(id)arrayWithSize:( NSUInteger )size_ producer:( ProducerBlock )block_; -(void)each:(...
Описание слайда:
JFFLibrirary’s NSArray расширения JFFLibrirary github +(id)arrayWithSize:( NSUInteger )size_ producer:( ProducerBlock )block_; -(void)each:( ActionBlock )block_; -(NSArray*)map:( MappingBlock )block_; -(NSArray*)select:( PredicateBlock )predicate_; -(NSArray*)flatten:( FlattenBlock )block_; -(NSUInteger)count:( PredicateBlock )predicate_; -(id)firstMatch:( PredicateBlock )predicate_; -(void)transformWithArray:( NSArray* )other_ withBlock:( TransformBlock )block_;

Слайд 18


Охраняющие выражения – guards { [ self beginUpdates ]; //update rows here //здесь ошибка если condition_ == true, мы не вызовем endUpdates if (...
Описание слайда:
Охраняющие выражения – guards { [ self beginUpdates ]; //update rows here //здесь ошибка если condition_ == true, мы не вызовем endUpdates if ( condition_ ) return; //update rows here [ self endUpdates ]; }

Слайд 19


Охраняющие выражения – guards -(void)withinUpdates:( void (^)( void ) )block_ { [ self beginUpdates ]; @try { block_(); } @finally { [ self...
Описание слайда:
Охраняющие выражения – guards -(void)withinUpdates:( void (^)( void ) )block_ { [ self beginUpdates ]; @try { block_(); } @finally { [ self endUpdates ]; } }

Слайд 20


Охраняющие выражения – guards { [ self.tableView withinUpdates: ^( void ) { //update rows here if ( condition_ ) return; //update rows here } ]; }
Описание слайда:
Охраняющие выражения – guards { [ self.tableView withinUpdates: ^( void ) { //update rows here if ( condition_ ) return; //update rows here } ]; }

Слайд 21


Отложенные вызовы onDeallocBlocks -(void)dealloc { [ [ NSNotificationCenter defaultCenter ] removeObserver: self ]; //release ivars here if NO ARC [...
Описание слайда:
Отложенные вызовы onDeallocBlocks -(void)dealloc { [ [ NSNotificationCenter defaultCenter ] removeObserver: self ]; //release ivars here if NO ARC [ super dealloc ]; } ИЛИ -(void)dealloc { [ self cancelSomeOperations ]; //release ivars here if NO ARC [ super dealloc ]; }

Слайд 22


Отложенные вызовы onDeallocBlocks 1. objc_setAssociatedObject( self , &ownerships_key_ , ownerships_ , RETAIN_NONATOMIC ); 2. Class...
Описание слайда:
Отложенные вызовы onDeallocBlocks 1. objc_setAssociatedObject( self , &ownerships_key_ , ownerships_ , RETAIN_NONATOMIC ); 2. Class JFFOnDeallocBlockOwner -(void)dealloc { if ( _block ) { _block(); [ _block release ]; } [ super dealloc ]; }

Слайд 23


Отложенные вызовы onDeallocBlocks -(void)addOnDeallocBlock:( void(^)( void ) )block_ { JFFOnDeallocBlockOwner* owner_ = [ [ JFFOnDeallocBlockOwner...
Описание слайда:
Отложенные вызовы onDeallocBlocks -(void)addOnDeallocBlock:( void(^)( void ) )block_ { JFFOnDeallocBlockOwner* owner_ = [ [ JFFOnDeallocBlockOwner alloc ] initWithBlock: block_ ]; [ self.ownerships addObject: owner_ ]; [ owner_ release ]; }

Слайд 24


Отложенные вызовы onDeallocBlocks //лечим циклическую ссылку __block id self_ = self; [ self addOnDeallocBlock: ^ { [ [ NSNotificationCenter...
Описание слайда:
Отложенные вызовы onDeallocBlocks //лечим циклическую ссылку __block id self_ = self; [ self addOnDeallocBlock: ^ { [ [ NSNotificationCenter defaultCenter ] removeObserver: self_ ]; } ];

Слайд 25


Отложенные вызовы Scheduled operations [ self performSelector: @selector( someMethod ) withObject: nil afterDelay: 20. ]; [ NSObject...
Описание слайда:
Отложенные вызовы Scheduled operations [ self performSelector: @selector( someMethod ) withObject: nil afterDelay: 20. ]; [ NSObject cancelPreviousPerformRequestsWithTarget: self ]; //отмена ИЛИ [ NSTimer scheduledTimerWithTimeInterval: 20. target: self selector: @selector( someMethod ) userInfo: nil repeats: YES ]; [ timer_ invalidate ]; //отмена

Слайд 26


Отложенные вызовы Scheduled operations __block id self_ = self; JFFScheduledBlock bk_= ^ { [ self_ someMethod ]; } CancelBlock cancel_ = [...
Описание слайда:
Отложенные вызовы Scheduled operations __block id self_ = self; JFFScheduledBlock bk_= ^ { [ self_ someMethod ]; } CancelBlock cancel_ = [ JFFScheduler addBlock: bk_ duration: 20. ]; [ self addOnDeallocBlock: cancel_ ];

Слайд 27


Блоки вместо делегатов в UIAlertView -(void)alertView:( UIAlertView* )alert_view_ clickedButtonAtIndex:( NSInteger )button_index_ { NSString* title_...
Описание слайда:
Блоки вместо делегатов в UIAlertView -(void)alertView:( UIAlertView* )alert_view_ clickedButtonAtIndex:( NSInteger )button_index_ { NSString* title_ = [ alert_view_ buttonTitleAtIndex: button_index_ ]; if ( [title_ isEqualToString: cancel_ ] ) //.. else if ( [ title_ isEqualToString: button1_ ] ) //.. else if ( [ title_ isEqualToString: button2_ ] ) //.. }

Слайд 28


Блоки вместо делегатов в UIAlertView JFFAlertButton* bt_ = [ JFFAlertButton alertButton: title_ action: ^ { //do some action } ]; JFFAlertView*...
Описание слайда:
Блоки вместо делегатов в UIAlertView JFFAlertButton* bt_ = [ JFFAlertButton alertButton: title_ action: ^ { //do some action } ]; JFFAlertView* alert_view_ = [ JFFAlertView alertWithTitle: @"Alert2" message: @"test" cancelButtonTitle: @"Cancel" otherButtonTitles: bt_, nil ];

Слайд 29


Обобщенное асинхронное программирование 1. Асинхронная операция в общем виде 2. Кеширование 3. Порядок выполнения Дерево зависимостей, login Lazy...
Описание слайда:
Обобщенное асинхронное программирование 1. Асинхронная операция в общем виде 2. Кеширование 3. Порядок выполнения Дерево зависимостей, login Lazy load, вычитка страниц 4. Load balancer 5. Асинхронные операции в контексте сессии 6. Асинхронные операции в UI

Слайд 30


Асинхронная операция в общем виде CancelBlock (^AsyncOperation) ( ProgressHandler , CancelHandler , FinishHandler ) { … };
Описание слайда:
Асинхронная операция в общем виде CancelBlock (^AsyncOperation) ( ProgressHandler , CancelHandler , FinishHandler ) { … };

Слайд 31


Кеширование Физический запрос
Описание слайда:
Кеширование Физический запрос

Слайд 32


Кэширование, API //физический запрос JFFAsyncOperation data_loader_ = ...; //кэшированный запрос JFFAsyncOperation cached_loader_ = [ self...
Описание слайда:
Кэширование, API //физический запрос JFFAsyncOperation data_loader_ = ...; //кэшированный запрос JFFAsyncOperation cached_loader_ = [ self asyncOperationForPropertyWithName: @”image” asyncOperation: data_loader_ ];

Слайд 33


Порядок выполнения - последовательность sequence_ = sequenceOfAsyncOperations ( operation1_ , operation2_ , nil );
Описание слайда:
Порядок выполнения - последовательность sequence_ = sequenceOfAsyncOperations ( operation1_ , operation2_ , nil );

Слайд 34


Порядок выполнения - группа group_ = groupOfAsyncOperations ( operation1_ , operation2_ , nil );
Описание слайда:
Порядок выполнения - группа group_ = groupOfAsyncOperations ( operation1_ , operation2_ , nil );

Слайд 35


Порядок выполнения – граф ленивые вычисления JFFAsyncOperation other_pages_ = ^( callbacks_ ) { NSArray* loaders_ = …; result_ = groupOfAsyncOp(...
Описание слайда:
Порядок выполнения – граф ленивые вычисления JFFAsyncOperation other_pages_ = ^( callbacks_ ) { NSArray* loaders_ = …; result_ = groupOfAsyncOp( loaders_ ); return result_( callbacks_ ); }; sequenceOfAsyncOperations( first_page_ , other_pages_ , nil );

Слайд 36


Load balancer
Описание слайда:
Load balancer

Слайд 37


Запросы и сессия safe_loader_ = checkSessionForLoaderBlock( loader_ )
Описание слайда:
Запросы и сессия safe_loader_ = checkSessionForLoaderBlock( loader_ )

Слайд 38


Легкий делегат { [ self.clip asyncImageWithWeakDelegate: self ]; } #pragma mark ClipDelegate -(void)clip:( Clip* )clip_ didLoadImage:( UIImage*...
Описание слайда:
Легкий делегат { [ self.clip asyncImageWithWeakDelegate: self ]; } #pragma mark ClipDelegate -(void)clip:( Clip* )clip_ didLoadImage:( UIImage* )image_ error:( NSError* )error_ { if ( self.clip != clip_ ) return; self.imageView.image = image_; }

Слайд 39


Легкий делегат JFFAsyncOperation loader_ = …; __block id weak_delegate_ = delegate_; [ weak_delegate_ weakAsyncOperation: loader_ ] ( nil, nil, ^( id...
Описание слайда:
Легкий делегат JFFAsyncOperation loader_ = …; __block id weak_delegate_ = delegate_; [ weak_delegate_ weakAsyncOperation: loader_ ] ( nil, nil, ^( id image_, NSError* error_ ) { [ weak_delegate_ clip: self didLoadImage: image_ error: error_ ]; } );

Слайд 40


Легкий делегат ARC JFFAsyncOperation loader_ = …; weak id weak_delegate_ = delegate_; loader_( nil , nil , ^( id image_ , NSError* error_ ) { [...
Описание слайда:
Легкий делегат ARC JFFAsyncOperation loader_ = …; weak id weak_delegate_ = delegate_; loader_( nil , nil , ^( id image_ , NSError* error_ ) { [ weak_delegate_ clip: self didLoadImage: image_ error: error_ ]; } );

Слайд 41


Всем спасибо !!! Email: gorbenko.vova@gmail.com Skype: vova.gorbenko.mac
Описание слайда:
Всем спасибо !!! Email: gorbenko.vova@gmail.com Skype: vova.gorbenko.mac



Похожие презентации
Mypresentation.ru
Загрузить презентацию