2013-07-05 2 views
2

을 초기화하기 (내가 낫다고 생각하는) 컴파일러는 나에게 경고를 준다 :, 나는 코드의 두 PICES이

Class method '+alloc' not found (return type defaults to 'id') 

나는 이것이 왜 hap인지 궁금하다. pening?

답변

1

Class 유형은 Objective-C 클래스 (C 구조체)를 나타냅니다. 런타임 문서 here을 참조하십시오. Class의이 프로토콜을 준수 할 수

정의 (당신은 class_conformsToProtocol 또는 NSObjectconformsToProtocol:로 확인하실 수 있습니다). 첫 번째 코드는 Class<ContactV2Storage>을 사용하는 것이 잘못되었습니다.

두 번째 조각은 대부분 정확하지만 할 수있는 안전한 방법은은 다음과 같습니다

for(Class tmpClass in config->ctxStorageClasses) { 
    if([tmpClass conformsToProtocol:@protocol(ContactV2Storage)]) { 
     id<ContactV2Storage> stor = [[[tmpClass alloc] init] autorelease]; 
     // do stuffs 
    } 
} 

이 클래스는 프로토콜 준수를 인스턴스화하고 안전하게 메시지를받을 수 있다는 확신이 방법을 사용하면 보내다. 프로토콜의 메소드가 옵션 인 경우 인스턴스화 된 객체 (이 경우 stor)가 호출하기 전에 해당 객체에 응답하는지 확인해야합니다. 그렇지 않으면 응용 프로그램이 중단됩니다.

관련 문제