Pytania otagowane jako objective-c-blocks

Bloki to implementacja zamknięć dla C firmy Apple, które są również dostępne dla Objective-C i C ++.


8
Co oznacza słowo kluczowe „__block”?
Co dokładnie oznacza __blocksłowo kluczowe w celu C? Wiem, że pozwala modyfikować zmienne w blokach, ale chciałbym wiedzieć ... Co dokładnie mówi kompilatorowi? Czy robi coś jeszcze? Jeśli to wszystko, co robi, to dlaczego jest potrzebne? Czy jest to gdzieś w dokumentacji? (Nie mogę tego znaleźć).

8
Przypisz zmienną wewnątrz bloku do zmiennej na zewnątrz bloku
Dostaję błąd Zmiennej nie można przypisać (brak specyfikatora typu __block) na linii aPerson = participant;. Jak mogę się upewnić, że blok ma dostęp do aPersonzmiennej i że aPersonzmienna może zostać zwrócona? Person *aPerson = nil; [participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { Person *participant = (Person*)obj; if ([participant.gender isEqualToString:@"M"]) …


7
Lista składni deklaracji blokowej
Składnia bloku w celu C (i rzeczywiście C, jak przypuszczam) jest notorycznie niestosowna. Przekazywanie bloków jako argumentów wygląda inaczej niż deklarowanie bloków jako ivars, które wyglądają inaczej niż typedefblokowanie bloków. Czy istnieje wyczerpująca lista składni deklaracji blokowej, którą mógłbym mieć pod ręką w celu szybkiego zapoznania się z nią?

8
Jak uniknąć przechwytywania siebie w blokach podczas implementacji interfejsu API?
Mam działającą aplikację i pracuję nad konwersją jej na ARC w Xcode 4.2. Jedno z ostrzeżeń wstępnych polega na selfsilnym uchwyceniu w bloku prowadzącym do cyklu zatrzymania. Zilustrowałem prosty przykład kodu, aby zilustrować problem. Wydaje mi się, że rozumiem, co to oznacza, ale nie jestem pewien, czy „poprawny” lub zalecany …

10
Oczekiwanie na wykonanie dwóch bloków asynchronicznych przed rozpoczęciem kolejnego bloku
Korzystając z GCD, chcemy przejść do wykonania i wykonania dwóch bloków asynchronicznych, zanim przejdziemy do kolejnych kroków wykonania. Jak najlepiej to zrobić? Wypróbowaliśmy następujące, ale wydaje się, że to nie działa: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block2 }); // wait until both the …

9
Zachowaj cykl na sobie z blokami
Obawiam się, że to pytanie jest dość proste, ale myślę, że jest istotne dla wielu programistów Objective-C, którzy wchodzą do bloków. Słyszałem, że skoro bloki przechwytują zmienne lokalne, do których odwołują się w nich jako constkopie, użycie selfw bloku może skutkować cyklem zachowania, jeśli ten blok zostanie skopiowany. Więc powinniśmy …

6
Kiedy używać enumerateObjectsUsingBlock, a kiedy for
Oprócz oczywistych różnic: Użyj, enumerateObjectsUsingBlockgdy potrzebujesz zarówno indeksu, jak i obiektu Nie używaj, enumerateObjectsUsingBlockgdy musisz zmodyfikować zmienne lokalne (myliłem się, zobacz odpowiedź bbum) Czy enumerateObjectsUsingBlockogólnie uważa się, że lepiej czy gorzej, kiedy for (id obj in myArray)również zadziała? Jakie są zalety / wady (na przykład czy jest bardziej lub mniej …

5
Zadeklaruj parametr metody bloku bez użycia typu typedef
Czy można określić parametr bloku metody w Objective-C bez użycia typedef? Musi być, podobnie jak wskaźniki do funkcji, ale nie mogę trafić w składnię wygrywającą bez użycia pośredniej czcionki: typedef BOOL (^PredicateBlock_t)(int); - (void) myMethodTakingPredicate:(PredicateBlock_t)predicate kompiluje się tylko powyższe, wszystkie te zawodzą: - (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate - (void) …


7
Przechowuj zamknięcie jako zmienną w Swift
W Objective-C możesz zdefiniować wejście i wyjście bloku, zapisać jeden z tych bloków, który jest przekazany do metody, a następnie użyć tego bloku później: // in .h typedef void (^APLCalibrationProgressHandler)(float percentComplete); typedef void (^APLCalibrationCompletionHandler)(NSInteger measuredPower, NSError *error); // in .m @property (strong) APLCalibrationProgressHandler progressHandler; @property (strong) APLCalibrationCompletionHandler completionHandler; - (id)initWithRegion:(CLBeaconRegion …

7
Alternatywa dla dispatch_get_current_queue () dla bloków uzupełniania w iOS 6?
Mam metodę, która akceptuje blok i blok uzupełniania. Pierwszy blok powinien działać w tle, a blok uzupełniania w dowolnej kolejce, w której wywołano metodę. W przypadku tego ostatniego zawsze używałem dispatch_get_current_queue(), ale wygląda na to, że jest przestarzały w iOS 6 lub nowszym. Czego powinienem użyć zamiast tego?

4
Jaka jest różnica między odwołaniem __weak a __block?
Czytam dokumentację Xcode i jest coś, co mnie zastanawia: __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; Z dokumentacji skopiowano: Blok stanowi silne odniesienie do przechwytywanych zmiennych. Jeśli używasz selfw bloku, blok tworzy silne odniesienie do bloku self, więc jeśli selfma również silne odniesienie do bloku (co …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.