dr inż. Jacek Dąbrowski
2014.04.25. (piątek) 16:15-17:00 Drugi termin tylko dla osób, które nie brały udziału w pierwszym terminie: Z przyczyn zdrowotnych (zwolnienie), Z innych przyczyn Email do 22. kwietnia z wyjaśnieniem, W temacie koniecznie KOLOMAC Moja odpowiedź 16./23. kwietnia (dwie rundy). Pytania (WWW)
Tak naprawdę trochę więcej niż para metod - mutable(array/set/orderedset)forkey(path) mutablearrayvalueforkey:... Koncepcja To-many relationship -insertobject:in<key>atindex: -removeobjectfrom<key>atindex: Obiekty proxy wyglądające jak tablica, a mapujące się na pary metod. Przykład praktyczny przy okazji Core Data
Mechanizm zbliżony do wskaźników na funkcje (wskaźniki na funkcje też istnieją (C); bloki) [obiekt wiadomość]; [obiekt wiadomośćdla:param]; SEL metoda = @selector(wiadomość); SEL metoda = @selector(wiadomośćdla:); if ([obiekt respondstoselector:metoda]) [obiekt performselector:metoda];
@selector() //sprawdzany przy kompilacji NSSelectorFromString // @runtime NSStringFromSelector Na marginesie: NSClassFromString NSStringFromClass NSStringFromProtocol NSProtocolFromString
Dlaczego nie ma przeciążania, Wskazówka bo format stringa opisującego metodę. Przykład? Kontrolki: -(void)settarget:(id)target; -(void)setaction:(sel)action; NSMethodDescriptor Możliwość uzyskania informacji o typach argumentów, Forwardowanie wiadomości,
An NSInvocation object contains all the elements of an Objective-C message: a target, a selector, arguments, and the return value. Typ mutowalny można zmieniać dowolne elementy i wielokrotnie wykorzystywać. (A co jeśli zmodyfikujemy coś w timerze?)
int kwadrat(int x) { return x*x; } int main() { int i = 4; int j = kwadrat(i); }
int kwadrat(int x) { return x*x; } int main() { int i = 4; } push push i jmp mov j, ax int j = kwadrat(i);
int kwadrat(int x) { return x*x; } int polowa(int x) { return x/2; } int main() { int (*funkcja)(int); funkcja = polowa; int i = 4; printf("%d", funkcja(i)); // 2 }
int kwadrat(int x) { return x*x; } int polowa(int x) { return x/2; } int main() { int (*funkcja)(int); funkcja = kwadrat; int i = 4; printf("%d", funkcja(i)); // 16 }
Podstawa ważnych elementów programowania obiektowego metody wirtualne, interfejsy (objc:protokoły), Virtual method table (np. C++) tablica adresów kolejność funkcji wynika z definicji w kodzie źródłowym, dość tanie tylko dodatkowe adresowanie pośrednie, Kacze typowanie When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
Klasa jest obiektem, wskaźnik na superklasę, dispatch table objc_msgsend sprawdza czy klasa implementuje dany selector, wywołuje funkcję albo szuka w klasie wyżej*,
Wywołanie metody: [receiver message] zamieniane jest na wywołanie funkcji objc_msgsend(receiver, @selector(message)); Z parametrami: [receiver message:x iparam:y]; objc_msgsend(receiver, @selector(message:iparam:),x,y ); Stąd brak przeciążania metod. Identyfikatorem funkcji jest SEL, i tak należy się odwoływać z poziomu objective-c, w rzeczywistości implementacja to słownik string->adres funkcji.
Wydajność szukania w słowniku stringów? @interface -(void) simulateparticle: (double) dt @end void (*simulate)(id, SEL, double); simulate = (void (*)(id, SEL, double)) [target methodforselector:@selector(simulateparticle:)]; for (int i = 0; i < 100, i++ ) setter(targetlist[i], :@selector(simulateparticle:), 0.1);
NSInvocation - (void)forwardinvocation:(nsinvocation *)aninvocation { if ([someotherobject respondstoselector: [aninvocation selector]]) [aninvocation invokewithtarget:someotherobject]; else [super forwardinvocation:aninvocation]; }
2014.04.25. (piątek) 16:15-17:00 Drugi termin tylko dla osób, które nie brały udziału w pierwszym terminie: Z przyczyn zdrowotnych (zwolnienie), Z innych przyczyn Email do 22. kwietnia z wyjaśnieniem, W temacie koniecznie KOLOMAC Moja odpowiedź 16./23. kwietnia (dwie rundy). Pytania (WWW)
Jak będzie wyglądała deklaracja (statycznej) metody przyjmującej dwa parametry typu int, a zwracającej napis (nazwy wymyśl). Jak wygląda typowy inicjalizator, który nie przyjmuje żadnych parametrów, ale ma przygotowane miejsce na zainicjalizowanie swojej zawartości? Jak wygląda tpy logiczny w objc? Jakie stałe nakazuje konwencja? Czym różni się @"aaa" od "aaa"? Czym różni się @5 od 5?
Jak zdefiniować tablicę z trzema stringami? Jak zdefiniować słownik z trzema parami string int? Jak zadeklarować blok, który przyjmuje i zwraca int? Jak zdefiniować blok, który zwraca podniesioną do kwadratu wartość otrzymaną parametrem (int)? Jak rzucić/przechwycić wyjątek w objective C?
Czym jest NSObject? Do czego służą metody: alloc, init, new, copy, mutablecopy, class, superclass, description, hash, isequal, iskindofclass, ismemberofclass, respondstoselector, conformstoprotocol? Co to są atrybuty obiektu w objc? Jak wygląda deklaracja? Co to są własności obiektu w objc? Jak wygląda deklaracja? Co to jest lazy instantiation? Jakie ma praktyczne uzasadnienie? Jakie domyślne atrybuty, metody wiążą się z deklaracją @property int test; Co oznacza nonatomic?
Jak działa notacja z kropką względem metod w objc? Jak wygląda kwestia hermetyzacji w objc? Co to jest kategoria klasy? Podaj przykład zastosowania. Co to jest rozszerzenie klasy? Podaj przykład zastosowania. Jak zastąpić internal przez użycie kategorii/rozszerzeń?
Jaki efekt spowoduje wywołanie metody na zerowym (nil) wskaźniku? Jaki efekt spowoduje próba wywołania niezaimplementowanej metody na zerowym (nil) wskaźniku? Jaki efekt spowoduje próba wywołania niezaimplementowanej metody na niezerowym wskaźniku? Co to jest id w objc? Co to jest protokół w objc? Jak wygląda deklaracja od strony klasy, a jak od strony wskaźnika na obiekt? Czym różnią się protokoły w objc od interfejsów w Javie/C#?
Co to jest liczenie referencji? Jak działa zarządzanie pamięcią w objc z ARC? Co to jest cykl referencji? Czym różni się sposób zarządzania pamięcią w objc (z ARC) od Javy/C#? Czym są i jak działają dowiązania silne/słabe w objc? Co to jest unsafe_unretained?
Co to jest obiekt (nie)mutowalny? Kiedy się takie stosuje? Co powiesz o mutowalności znanych tobie typów w objc? Co to jest NSValue? Podaj zastosowanie. Co to jest NSNumber? Podaj zastosowanie. Jak mają się kolekcje do zarządzania pamięcią? Co to jest property list? Do czego służy? Jak można typować kontenery w objc?
Co to jest Key-Value Coding? Co to jest keypath? Co to jest i jak działa Key-Value Observing? Co to jest (i do czego służy) keypathsforvaluesaffecting (KVO)?
Co to jest block w objc? Co to jest kontekst leksykalny i jak się ma do bloku w objc? Jak się ma blok do zarządzania pamięcią w objc0? Po co oznaczać zmienną modyfikatorem block? Do czego służą wyjątki w objc? Czym można rzucić w objc?