[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.

Zarządzanie projektami – krótkie wprowadzenie – wideo znalezione na Youtube.

Dziś mam dla Was dwugodzinny film, dotyczący zarządzaniem projektem, a który znalazłem na Youtube.  Film ten powinien przydać się każdej początkującej w tej tematyce osobie. Powinien pomóc pokazać ten skomplikowany temat w całości w różnych obszarach. Film ten nie nauczy Cię prowadzić projekty. Bez przesady, w 2 h czasu nikt nie streści 600 stron PMBOK Guide’a. Nie oczekujcie cudów. Ale jestem przekonany, że będzie to dobry wstęp do tego obszaru wiedzy. Zapraszam do obejrzenia.

Zaznaczam też, że ten film nie będzie odkrywczy dla tych, którzy mają solidną wiedzę i praktyczne doświadczenie. Ci wszyscy którzy na co dzień prowadzą projekty oparte o PMBOK, na pewno wiedzą już wszystko.

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