«objective-c-blocks» etiketlenmiş sorular

Bloklar, Apple'ın Objective-C ve C ++ için de mevcut olan C için kapatma uygulamasıdır.


8
“__Block” anahtar kelimesi ne anlama geliyor?
__blockObjective-C anahtar kelimesi tam olarak ne anlama geliyor? Bloklardaki değişkenleri değiştirmenize izin verdiğini biliyorum, ama bilmek istiyorum ... Derleyiciye tam olarak ne anlatıyor? Başka bir şey yapıyor mu? Eğer hepsi bu kadarsa, neden ilk etapta ihtiyaç duyulur? Belgelerde herhangi bir yerde mi? (Bulamıyorum).

8
Blok içindeki bir değişkeni Blok dışındaki bir değişkene atama
Hata alıyorum Değişken atanamaz (__block türü belirleyicisi eksik) hatta aPerson = participant;. Bloğun aPersondeğişkene erişebildiğinden ve değişkenin aPersondöndürülebildiğinden nasıl emin olabilirim? Person *aPerson = nil; [participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { Person *participant = (Person*)obj; if ([participant.gender isEqualToString:@"M"]) { aPerson = participant; *stop = YES; } }]; return …


7
Blok Bildirimi Sözdizimi Listesi
Objective C'deki (ve aslında C, sanırım) blok sözdizimi herkesin bildiği gibi uyumsuzdur. Blokları argüman olarak iletmek, blokları ivars olarak tanımlamaktan farklıdır, bu da typedefbloklardan farklı görünür . Hızlı başvuru için elimde tutabileceğim kapsamlı bir blok bildirim sözdizimi listesi var mı?

8
Bir API uygularken bloklar halinde kendini yakalamayı nasıl önleyebilirim?
Çalışan bir uygulama var ve ben Xcode 4.2 ARC dönüştürmek üzerinde çalışıyorum. Ön kontrol uyarılarından biri, selftutma döngüsüne yol açan bir blokta güçlü bir şekilde yakalamayı içerir . Sorunu göstermek için basit bir kod örneği yaptım. Bunun ne anlama geldiğini anlıyorum ama bu tür bir senaryoyu uygulamak için "doğru" veya …

10
Başka bir bloğa başlamadan önce iki eşzamansız blok yürütülmesini beklemek
GCD kullanırken, sonraki yürütme adımlarına geçmeden önce iki eşzamansız blok yürütülene ve tamamlanana kadar beklemek istiyoruz. Bunu yapmanın en iyi yolu nedir? Aşağıdakileri denedik, ancak işe yaramıyor gibi görünüyor: 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 block1 and …

9
Bloklarla `` kendi '' döngüsünü koruma
Korkarım ki bu soru oldukça basit, ama bence bu bloklara giren birçok Objective-C programcısıyla alakalı. Duyduğum şey, bloklar içinde constkopya olarak belirtilen yerel değişkenleri yakaladığından , selfbir blok içinde kullanmak blokun kopyalanması durumunda bir tutma döngüsüyle sonuçlanabilir. Dolayısıyla, __blockbloğu selfkopyalamak yerine doğrudan uğraşmaya zorlamak için kullanmamız gerekiyor . __block typeof(self) …

6
İçin enumerateObjectsUsingBlock vs. ne zaman kullanılır?
Bariz farklılıkların yanı sıra: enumerateObjectsUsingBlockHem dizine hem de nesneye ihtiyacınız olduğunda kullanın enumerateObjectsUsingBlockYerel değişkenleri değiştirmeniz gerektiğinde kullanmayın (Bu konuda yanılmışım, bumum'un cevabına bakın) Ne enumerateObjectsUsingBlockzaman for (id obj in myArray)işe yarayacağı genellikle daha iyi veya daha kötü olarak kabul edilir ? Avantajları / dezavantajları nelerdir (örneğin az çok performans mıdır)?

5
Typedef kullanmadan bir blok yöntemi parametresi bildirin
Typedef kullanmadan Objective-C'de bir yöntem blok parametresi belirtmek mümkün müdür? İşlev işaretçileri gibi olmalı, ancak bir ara typedef kullanmadan kazanan sözdizimine ulaşamam: typedef BOOL (^PredicateBlock_t)(int); - (void) myMethodTakingPredicate:(PredicateBlock_t)predicate sadece yukarıdaki derlemeler, tüm bunlar başarısız: - (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate - (void) myMethodTakingPredicate:BOOL (^predicate)(int) ve başka hangi kombinasyonları denediğimi hatırlayamıyorum.


7
Bir kapağı Swift'te değişken olarak saklama
Objective-C'de, bir bloğun giriş ve çıkışını tanımlayabilir, bir yönteme aktarılan bu bloklardan birini depolayabilir ve daha sonra bu bloğu daha sonra kullanabilirsiniz: // 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 *)region completionHandler:(APLCalibrationCompletionHandler)handler …

7
İOS 6'da tamamlama blokları için dispatch_get_current_queue () alternatifleri?
Bir blok ve bir tamamlama bloğunu kabul eden bir yöntemim var. İlk blok arka planda çalışmalı, tamamlama bloğu ise yöntemin çağrıldığı kuyrukta çalışmalıdır. İkincisi için her zaman kullandım dispatch_get_current_queue(), ancak iOS 6 veya sonraki sürümlerde kullanımdan kaldırılmış gibi görünüyor. Onun yerine ne kullanmalıyım?
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.