[NSArray containsObject:] vs [NSSet containsObject:]

Dzisiejszy post nie jest wyłącznie związany z Objective-C i iOS. Chcę jedynie zwrócić uwagę na pewien drobny szczegół w pisaniu aplikacji. Szczegół, który łatwo przeoczyć i zrobić coś bardzo nieefektywnie.

Sam miałem możliwość poprawienia czegoś takiego w jednym z projektów jakiś czas temu.  Dziś przyszła pora na podzielenie się tym i zwrócenie uwagi na myślenie. To ważne.

Załóżmy, że mamy do przeszukania i do znalezienia 1 unikalny rekord ze zbioru około 70 tysięcy 25 znakowych łańcuchów znaków.  Jak to zrobić? Opcji jest sporo. Dziś pokażę różnicę w 2 różnych podejściach używając gotowych metod containsObject z kolekcji NSArray i NSSet. Kolekcje bardzo często używane w wielu aplikacjach mobilnych.

Czytaj dalej [NSArray containsObject:] vs [NSSet containsObject:]

Jak przyśpieszyć CoreData?

Ten post to notatka, aby nie zgubić przydatnego linka do listy 8 rzeczy, których weryfikacja pozwoli nam na upewnienie się, że aplikacja mobilna wykorzystuje CoreData we w miarę optymalny sposób:

http://agilemd.ghost.io/2015/02/02/optimizing-coredata-fetches/

Polecam przeczytać zalinkowany artykuł.

EDIT:

Polecam też zapoznanie się z dokumentacją od Apple, nt wydaności CoreData. Dosyć dobrze opisują pewne zagadnienia i sztuczki jakie można zrobić, żeby coś przyśpieszyć pod tym linkiem.

Wzorce projektowe: Fabryka Abstrakcyjna (Abstract Factory) w Objective-C

W poprzednim poście pokazałem implementację wzorca Fabryka Abstrakcyjna (ang. Abstract Factory) w języku Swift. Dziś pora na odpowiednik w Objective-C.

Opis wzorcahttp://pl.wikipedia.org/wiki/Fabryka_abstrakcyjna_(wzorzec_projektowy)

Czytaj dalej Wzorce projektowe: Fabryka Abstrakcyjna (Abstract Factory) w Objective-C

Wzorce projektowe: Fabryka Abstrakcyjna (Abstract Factory) w Swift

Fabryka Abstrakcyjna (ang. Abstract Factory) to kolejny wzorzec kreacyjny pomagający nam w tworzeniu obiektów. W przeciwieństwie do buildera, nie jest nastawiona na zmniejszenie ilości konstruktorów, ale na dostarczenie mechanizmu tworzącego obiekty jednej rodziny (jednej grupy). Zapraszam na zapoznanie się z implementacją w Swift.

Opis wzorcahttp://pl.wikipedia.org/wiki/Fabryka_abstrakcyjna_(wzorzec_projektowy)

Czytaj dalej Wzorce projektowe: Fabryka Abstrakcyjna (Abstract Factory) w Swift

EventKit bug: „I screwed up somewhere in date calculation”

Jakiś czas temu pracując nad integracją aplikacji z kalendarzem iOS dotarłem do ciekawego błędu we frameworku EventKit. W logach Xcode dostałem coś takiego:

*** Assertion failure in -[EKEvent _deleteThisOccurrence], /SourceCache/Calendar_Sim/Calendar-1374.0.25/EKEvent.m:2180

A przy logowaniu większej ilości informacji dotarłem do jakże użytecznych informacji:

exception = {
callStack = (
  0 CoreFoundation 0x0000000110a62a75 __exceptionPreprocess + 165
  1 libobjc.A.dylib 0x000000010f3a0bb7 objc_exception_throw + 45
  2 CoreFoundation 0x0000000110a628da +[NSException raise:format:arguments:] + 106
  3 Foundation 0x000000010ddd0b6f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
  4 EventKit 0x000000010bbe8832 -[EKEvent _deleteThisOccurrence] + 1947
  5 EventKit 0x000000010bbe808c -[EKEvent _deleteWithSpan:error:] + 402
  6 EventKit 0x000000010bbe8def -[EKEvent removeWithSpan:error:] + 281
  7 EventKit 0x000000010bbcb599 -[EKEventStore removeEvent:span:commit:error:] + 162
...
  27 libdyld.dylib 0x000000010fe1b145 start + 1
  28 ??? 0x0000000000000001 0x0 + 1
);
  name = NSInternalInconsistencyException;
  reason = "I screwed up somewhere in date calculation";
  userInfo = "";
};

No tak, bardzo mi pomogła ta wiadomość: I screwed up somewhere in date calculation. Zdecydowanie wiem teraz co zrobiłem źle… A tak na serio to mógłby się ten developer ogarnąć i zrobić porządny komunikat błędu. Inna sprawa, że powyższy błąd jest problemem znanym od 2013 roku. Przez 2 wersje iOSa nie potrafili tego ogarnąć.

Problem dotyczy usuwania pojedynczego wystąpienia powtarzalnego zdarzenia z kalendarza.

removeEvent:event span:EKSpanThisEvent commit:YES error:&error

Wrzucam ten wpis, żeby zostawić jakiś ślad w internecie po tym. Jeśli szukasz rozwiązania to go dla Ciebie nie mam. Nie chce podsuwać jakichś workaroundów w stylu usuń całą serię zdarzenia i stwórz 2 inne nie zawierające tego pojedynczego wystąpienia, które trzeba usunąć.

Wzorce projektowe: Budowniczy (Builder) w Objective-C

Budowniczy (ang. Builder) to wzorzec pomagający nam w tworzeniu skomplikowanych obiektów. Poprzednio pokazałem implementację w Swift. Dziś jest kolaj na kod w Objective-C.

Opis wzorcahttp://pl.wikipedia.org/wiki/Budowniczy_(wzorzec_projektowy)

Czytaj dalej Wzorce projektowe: Budowniczy (Builder) w Objective-C

Wzorce projektowe: Budowniczy (Builder) w Swift

Budowniczy (ang. Builder) to wzorzec pomagający nam w tworzeniu skomplikowanych obiektów. Dziś zapraszam na zapoznanie się z implementacją w Swift.

Opis wzorcahttp://pl.wikipedia.org/wiki/Budowniczy_(wzorzec_projektowy)

Czytaj dalej Wzorce projektowe: Budowniczy (Builder) w Swift