«objective-c-blocks» 태그된 질문

블록은 Apple의 C 용 클로저 구현이며 Objective-C 및 C ++에서도 사용할 수 있습니다.


8
“__block”키워드는 무엇을 의미합니까?
__blockObjective-C 의 키워드는 정확히 무엇을 의미합니까? 블록 내에서 변수를 수정할 수 있다는 것을 알고 있지만 알고 싶습니다 ... 컴파일러에게 정확히 무엇을 알려줍니까? 다른 일이 있습니까? 그게 다라면 왜 처음에 필요한가요? 어디서나 문서에 있습니까? (찾을 수 없습니다).

8
블록 내부의 변수를 블록 외부의 변수에 지정
오류가 발생했습니다 변수를 할당 할 수 없습니다 (__block 유형 지정자가 누락 됨) 줄에 aPerson = participant;. 블록이 aPerson변수에 액세스하고 변수 aPerson가 반환 될 수 있도록하려면 어떻게해야 합니까? Person *aPerson = nil; [participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { Person *participant = (Person*)obj; if ([participant.gender isEqualToString:@"M"]) { aPerson = participant; …


7
블록 선언 구문 목록
Objective C의 블록 구문 (그리고 실제로 C, 나는 추정)은 부적절합니다. 블록을 인수로 전달 typedef하는 것은 블록을 ing 블록 과 다르게 보이는 ivar로 선언하는 것과 다릅니다 . 빠른 참조를 위해 계속 사용할 수있는 포괄적 인 블록 선언 구문 목록이 있습니까?

8
API를 구현할 때 블록에서 자체 캡처를 피하려면 어떻게해야합니까?
작동하는 앱이 있고 Xcode 4.2에서 ARC로 변환하려고합니다. 사전 점검 경고 중 하나는 self유지 주기로 이어지는 블록에서 강력한 캡처를 포함 합니다. 문제를 설명하기 위해 간단한 코드 샘플을 만들었습니다. 나는 이것이 의미하는 바를 이해한다고 생각하지만 이러한 유형의 시나리오를 구현하는 "올바른"또는 권장되는 방법은 확실하지 않습니다. self는 MyAPI 클래스의 인스턴스입니다 아래 코드는 단순화되어 내 …

10
다른 블록을 시작하기 전에 두 개의 비동기 블록이 실행될 때까지 대기
GCD를 사용할 때 다음 실행 단계로 넘어 가기 전에 두 개의 비동기 블록이 실행될 때까지 기다립니다. 가장 좋은 방법은 무엇입니까? 우리는 다음을 시도했지만 작동하지 않는 것 같습니다. 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 block2 are …

9
블록으로 '자기'사이클 유지
나는이 질문이 매우 기본적이라고 생각하지만, 많은 Objective-C 프로그래머와 관련이 있다고 생각합니다. 내가 들었던 것은 블록 내에서 const복사본 으로 참조되는 로컬 변수를 블록으로 캡처하기 때문에 블록 self내에서 블록을 사용 하면 해당 블록을 복사하면 유지주기가 발생할 수 있다는 것입니다. 따라서 __block블록을 self복사하지 않고 직접 처리하도록 블록 을 사용해야 합니다 . __block typeof(self) …

6
enumerateObjectsUsingBlock과 for를 사용하는 경우
명백한 차이점 외에 : enumerateObjectsUsingBlock인덱스와 객체가 모두 필요할 때 사용 enumerateObjectsUsingBlock지역 변수를 수정해야 할 때 사용하지 마십시오 (나는 이것에 대해 잘못했습니다. 범음의 대답을보십시오) 되어 enumerateObjectsUsingBlock일반적으로 고려 좋든 나쁘 때 for (id obj in myArray)것 또한 사용할 수 있습니까? 장점 / 단점은 무엇입니까 (예 : 성능이 다소 떨어짐)?

5
typedef를 사용하지 않고 블록 메소드 매개 변수 선언
typedef를 사용하지 않고 Objective-C에서 메소드 블록 매개 변수를 지정할 수 있습니까? 함수 포인터와 같아야하지만 중간 typedef를 사용하지 않고 우승 구문을 사용할 수는 없습니다. typedef BOOL (^PredicateBlock_t)(int); - (void) myMethodTakingPredicate:(PredicateBlock_t)predicate 위의 컴파일만이 실패합니다. - (void) myMethodTakingPredicate:( BOOL(^block)(int) ) predicate - (void) myMethodTakingPredicate:BOOL (^predicate)(int) 그리고 내가 시도한 다른 조합을 기억할 수 없습니다.


7
Swift에서 클로저를 변수로 저장
Objective-C에서 블록의 입력 및 출력을 정의하고 메소드에 전달 된 블록 중 하나를 저장 한 다음 나중에 해당 블록을 사용할 수 있습니다. // 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
iOS 6의 완료 블록에 대한 dispatch_get_current_queue ()의 대안은 무엇입니까?
블록과 완료 블록을 받아들이는 메서드가 있습니다. 첫 번째 블록은 백그라운드에서 실행되어야하며 완료 블록은 메서드가 호출 된 모든 큐에서 실행되어야합니다. 후자의 경우 항상을 사용 dispatch_get_current_queue()했지만 iOS 6 이상에서는 더 이상 사용되지 않는 것 같습니다. 대신 무엇을 사용해야합니까?

4
__weak 참조와 __block 참조의 차이점은 무엇입니까?
저는 Xcode의 문서를 읽고 있는데 여기에 저를 당혹스럽게하는 것이 있습니다. __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; 다음은 문서에서 복사되었습니다. 블록은 캡처하는 변수에 대한 강력한 참조를 형성합니다. 당신이 사용하는 경우 self블록 내에서 블록에 강한 참조를 형성 self그렇다면, self또한 블록에 대한 강한 참조 (가 일반적으로 수행하는), 강한 …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.