2009-03-03 5 views
-2

ClassName.m에 인스턴스 메소드를 작성합니다.iPhone에서 자체 클래스 메서드를 사용하는 방법? (개념적 질문)

-(void)methodName:(paraType)parameter 
{...}

[self methodName:parameter];
을 사용하여 호출합니다. 경고가 표시되지만 코드는 여전히 성공적으로 실행됩니다.

클래스의 인스턴스를 만들지 않았기 때문에 이렇게 할 수 있습니까? 왜 방법이 여전히 정상적으로 작동합니까? 그리고 경고를 막기 위해 자기 방법을 호출하는 올바른 방법은 무엇입니까?

답변

5

음 경고와 함께 도움을받는 첫 번째 단계는 내가 그것을 알 수없는 메시지에 대한 뭔가 가정입니다 경고 :

를 게시하는 것? 그렇다면 컴파일러가 "methodName"에 대한 호출을 보더라도 객체에 유효한지 여부를 알 수 없기 때문입니다.

당신의 코드는 다음과 같을 것입니다.

-(void) someFunc 
{ 
    ... 
    [self methodName:parameter]; 
    ... 
} 

-(void)methodName:(paraType)parameter 
{ 
... 
} 

a) 'methodName'함수를 먼저 파일에 배치하여 컴파일러가 호출 전에 사용했는지 확인하십시오.

b) 클래스 인터페이스에서 선언하십시오. 예 :

// Foo.h 
@interface Foo { 
... 
} 
-(void) methodName:(paraType)parameter; 
@end 
1

경고 메시지는 무엇입니까?

헤더 파일에 메서드에 대한 정의가 있습니까?

사용하는 구문은 자체에서 메소드를 호출하는 프로퍼티 방법입니다.

+0

문제는 기본 일 수 있지만,이 문제는 많이 있습니다. 머리 파일에 메서드를 정의하는 것을 잊어 버립니다. 정말 고마워. –

1

이 메서드는 Objective-C 메서드가 런타임에 해석되므로 작동합니다. 나는 당신이 얻는 경고가 "Object Foo가 -methodName :에 응답하지 않을 수도 있습니다"라고 예상하고 반환 유형을 id으로 기본값 지정한다고 알려줍니다. 컴파일러는 코드를 호출 할 때까지 컴파일 할 때까지 -methodName:이라는 선언이나 정의를 보지 않았기 때문입니다. 경고를 제거하려면 클래스의 인터페이스 또는 클래스의 범주에서 메소드를 선언하십시오.

1

경고 메시지가 나타나면 메서드 서명이 인터페이스에 없기 때문일 수 있습니다.

@interface foo .... 

-(void)method; 

일단 구현이 작성되면 컴파일러가 메서드를 처음으로 보았 기 때문에 경고가 사라집니다. 이렇게하지 않고도 작동하지만 경고 메시지는 성가신 일입니다.

관련 문제