Your SlideShare is downloading. ×
NSOperation(Queue)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

NSOperation(Queue)

791

Published on

slides from the presentation that happend on 2nd cocoaheads in Cracow

slides from the presentation that happend on 2nd cocoaheads in Cracow

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
791
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
22
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. NSOperation(Queue) howto Krzysztof Profic | cocoaheads Kraków | 10.01.2013
  • 2. Czy programowaniewielowątkowe jest trudne?
  • 3. Sposoby na wykonanie operacji w tle• pthread - POSIX thread• NSThread - Cocoa thread• Idle-time notifications (NSPostWhenIdle)• performSelectorInBackground:(SEL)sel• GCD & blocks: dispatch_async()• NSOperation
  • 4. GCD vs NSOperation• GCD • low-level C API • podejście zadaniowe• NSOperation(Queue) • podejście obiektowe
  • 5. NSOperation• reprezentuje jednostkę obliczeniową• aby stworzyć subklasujemy lub:• korzystamy z istniejącej subklasy: • NSInvocationOperaion • NSBlockOperation
  • 6. NSInvocationOperationzbudowanie operacji:- (id)initWithInvocation:(NSInvocation *)inv- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)argpobranie rezultatu- (id)result
  • 7. NSBlockOperationzbudowanie operacji:+ (id)blockOperationWithBlock:(void (^)(void))blockdodanie bloku- (void)addExecutionBlock:(void (^)(void))block
  • 8. subklasowanie NSOperation • Subklasujemy (konwencja nazewnicza) • Metody do nadpisania: - (void)main - (void)start - (BOOL)isConcurrent - (BOOL)isExecuting - (BOOL)isFinished
  • 9. concurent vsnon-concurent
  • 10. subklasowanie NSOperation • Subklasujemy (konwencja nazwenicza) • Implementujemy - (void)main
  • 11. - (void)main-(void)main{ @autoreleasepool { if ([self isCancelled]) return; NSURLRequest * req = [NSURLRequest requestWithURL:self.url]; NSData * imageData = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil]; if (imageData == nil) return; if ([self isCancelled]) return; self.result = [UIImage imageWithData:imageData]; }}
  • 12. Thread-safety• NSOperation jest thread-safe• trzeba zapewnić thread-safety dla swego kodu@synchronized( ) { ...}
  • 13. Uruchomienie operacji• dodanie do kolejki (kolejka uruchamia operacje)[queue addOperation:operation];• ręczne uruchomienie operacji (żadziej):[operation start];
  • 14. Completion- (void)setCompletionBlock:(void (^)(void))block
  • 15. Stan• maszyna stanowa • isReady • isFinished • isExecuting • isCanceled• obsługa KVO
  • 16. Anulowanie• anulowanie operacji [operation cancel];• sprawdzanie stanu operacji: [self isCancelled]
  • 17. Zależności[filterOperation addDependency:downloadOperation];[filterOperation removeDependency:downloadOperation];
  • 18. Piorytety[filterOperation setQueuePriority:NSOperationQueuePriorityHigh];
  • 19. NSOperationQueue• obsługa zależności między operacjami• priorytety operacji• usypianie operacji• anulowanie wszystkich operacji• obsługa współbieżności
  • 20. Twrzenie kolejkiNSOperationQueue * queue = [[NSOperationQueue alloc] init];
  • 21. Obsługa współbieżnościqueue.maxConcurrentOperationCount = 6;
  • 22. Usypianie• uśpienie[queue setSuspended:YES];• obudzenie[queue setSuspended:NO];
  • 23. Ciekawostki• designated initializer@interface MyOperation : NSOperation-(id)initWithNumber:(NSNumber *)start string:(NSString *)string;@end• użycie delegate dla zwracanych wartości[(NSObject *)self.delegate performSelectorOnMainThread:(@selector(delegateMethod:)) withObject:object waitUntilDone:NO];• często sprawdzać isCancelled• anulowanie nie dzieje się natychmiast• zakończona operacja nie może być wykorzystana ponownie!• isFinished zawsze po zakończeniu == YES
  • 24. Linki• https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference• http://nshipster.com/nsoperation/• http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues• http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/
  • 25. Dzięki :)

×