2012-11-25 4 views
2

저는 블록을 처음 사용합니다. 나는 싱글 내부, 그리고 난 내가 선언되지 않은 식별자 자체의 오류 사용을받을이iOS 블록 - 선언되지 않은 식별자 자체 사용

void (^ myBlock)() = ^(){ [self doStuff]; }; 

을한다.

doStuff는 싱글 톤 내부의 메서드입니다.

그러나이 블록이 다른 방법으로 선언 된 경우 Xcode는 정상입니다.

왜 그럴까요? 감사.

+2

어디에서이 행을 쓰고 있습니까 ?? –

답변

2

아래처럼 @implementation 파일 (이니셜 포함) 방법 중 하나에 인터페이스 블록을 정의하고 초기화 할 수있는 모든 방법은 숨겨진 PARAM으로 자신을 전달됩니다

@interface YourClass { 
    void (^ myBlock)(); 
} 

@implementation YourClass 

    - (void)yourMethod { 
    myBlock = ^(){ [self doStuff]; }; 
    } 


@end 
+0

그때 작동해야합니다 .. 내가 위에서 언급 한대로 당신이 블록을 정의하는 경우 .. 작동합니다. –

+0

아, 아마도 void (^ myBlock)()를 의미합니다. 인터페이스 내부 및 myBlock = ^() {[self doStuff]; }; 방법 내부 .... – SpaceDog

+0

내 대답을 업데이 트 .. –

0

때문이다. self는 다른 변수와 같으며 블록은 메서드에서 볼 때 '볼 수/캡처 할 수 있습니다.'

메서드에 없으면 self는 변수 세트가 아니며 블록은 '볼 수 없습니다'

1

블록 내에서 직접 self으로 전화하지 마십시오.
대신 안전 블록 포인터를 self에서 만들고 블록 내에서 액세스해야합니다.

__block id safeBlockSelf = self; 
void (^ myBlock)() = ^(){ [safeBlockSelf doSomething]; }; 

자세한 내용은 How do I avoid capturing self in blocks when implementing an API?을 참조하십시오.

관련 문제