1

저는 iPhone 용으로 개발하기 시작했고 Objective-C를 배우는 과정에 있습니다. 이 흥미를 만드는 클래스의 @interface에서 MyMethod라는 언급이 없다는 것을 무엇Objective-C 메소드 구현 뉘앙스

-(void)myMethod; { 
    // method body 
} 

:이 같은 클래스의 @implementation 측의 메소드를 구현하는 몇 가지 코드를 보았다. 이 예제 프로젝트를 시도하고 컴파일 할 때 XCode에서 myMethod가 호출 코드에 의해 표시되지 않을 수 있다는 경고가 표시됩니다.

아무도 나에게 무슨 일이 일어나는지 말해 줄 수 있습니까?

감사합니다.

답변

0

ObjC에서, 메소드 호출은 당신이 [obj myMethod];을 할 때 "MyMethod라는"라는 하나를 발견하면, 내부적으로 ObjC 런타임 소프트웨어는 시간에 그 시점에서 클래스 메소드 통해 이동 것을 의미 동적 (dynamic binding를) 해결 그러면 전화가 걸립니다.

런타임에 메서드에 메서드를 추가 할 수도 있습니다.

@interface 섹션의 메서드 선언은 컴파일러가 특정 클래스에 대해 공개적으로 사용할 수있는 메서드를 결정하는 데 도움이됩니다. @implementation에만 메서드를 추가하면 컴파일러에서 경고 할 수 있지만 코드는 여전히 컴파일되고 작동합니다.

가끔 내 개체를 내부 메서드를 추가하는 데 사용합니다. 내 개체는 그 뒤에 다른 메서드에서만 호출되며 외부에서는 호출되지 않습니다. 비록 그것에 대해 경고를 보지 못했지만 ... 이후에 동일한 코드에서 호출 코드가 으로 설정되어 있는지 확인하십시오.

+0

경고를 발생시키는 메서드 이름 다음에 세미콜론이 올 수 있습니다. 유닛 테스트 클래스를 작성할 때 항상 @interface에서 선언을 생략하고 그러한 경고를 보지 못합니다. – JeremyP

+0

@JeremyP 아니요, 세미콜론은 유효합니다. 사실, 메소드 헤더를'@interface'에서 복사하여 붙여 넣을 때 메소드 헤더를 편집 할 필요가 없다는 것은 꽤 깔끔합니다. – hamstergene

2

그냥 당신은 선언을하지 않아도 C.에서 함수처럼 (즉, 그것은 @interface에있을 필요는 없습니다)하지만 외에는 선언, 코드 를 존재하지 않는 경우 메서드 정의가 경고를 생성합니다. 코드 다음에 메소드 정의는 경고를 생성하지 않습니다.

관련 문제