Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
693
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
21
Comments
0
Likes
0

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 :)