2010-12-01 3 views
6

클래스 구성원으로 사용할 때 누군가의 구문을 이해하는 데 도움이되기를 바랍니다. 실제로 잘 작동하고 몇 가지 코드를 가지고 :iOS 4 - 블록을 클래스 멤버로 사용

@class Structure; 
typedef void (^StructureDeleteCallback)(Structure *); 

@interface StructureListDelegate : NRFCTableDelegate 
{ 
    StructureDeleteCallback _structureDeleteCallback; 
} 

@property (nonatomic, copy) StructureDeleteCallback structureDeleteCallback; 

@end 

이 작동하지만이 typedef 문의 구문을 이해하고 싶습니다; 실제로 typedef를 사용해야하는지 여부와 관계가 있습니다.

제가 읽은 바에 따르면이 상황에서 typedef을 사용하면 코드가 훨씬 명확 해 지므로 권장합니다. 그러나 typedef없이이 작업을 시도 할 때 컴파일 할 수 없었습니다.

typedef [actual type] [new name for type]; 

같은 :

typedef double CLLocationDegrees; 

하지만 내 typedef 문의 구문이 일치하지 않는 타입 정의의 나의 이해는 구문은 기본적으로이었다이었다. 그래서 제 질문은 다음과 같습니다

  • 어떻게 내 typedef 문의 구문이 다른 typedef 문에서 이렇게 다를 수 있습니다/I 실제로 사용하고 구문은 컴파일러에게 무엇을 의미 하는가?
  • 을 사용하지 않고 클래스의 구성원으로 블록을 만들 수 있습니까? 자신이 여기에 당신의 라인을 따라 질문을 한 나는

답변

7

: Block references as instance vars in Objective-C

내 대답 herehere를 참조하십시오.

+0

아! 필자는 typedef를 사용하지 않고도 작동시킬 수 없었습니다. 왜냐하면 iVar을 정의하는 구문이 완전히 다르다는 것을 인식하지 못했기 때문입니다. 나는 여전히 [typename] [iVarName]을 가져야한다고 생각했다; – GendoIkari

+0

마지막으로 한 가지를 명확히하기 위해 ... typedef에 있든 아니면 그냥 블록을 선언하든, 기본적으로 블록은 다른 유형보다 선언하기위한 구문이 다릅니다. 컴파일러는^기호를보고 변수 이름이^다음에 오는 것을 알고 int x;와 같은 유형 이름 뒤에? 감사! – GendoIkari

+0

@Gendolkari 당신이있어! :) –

관련 문제