2012-02-09 8 views
0

너희들은 내가 진짜 빨리 개념을 이해하는 데 도움이, 나는 문제가 목표 - C로 C의 변환을 인식하지 못했습니다 :목표 C 인스턴스 방법 도움말 * 초급 *

내가보고 특정 인스턴스 방법이 있다면 이 같은 :

-(void)addOwnerNamesObject:(NSString *)n; 
{ 
    // ownerNames defined as NSMutableSet 
    [ownerNames addObject:n]; 
} 

내가 몇 가지를 이해 ...

  1. 이 프로그램에서 호출 할 수있는 인스턴스 방법입니다.

      : 여기 (void)InstanceMethod(Char *nameOfArgument)

    내가 도움을 필요로하는 곳에이다 -이 C에서

  2. 를 (단지 중괄호의 코드를 실행) 아무것도 반환하지 것입니다 C에서
  3. 이 구문은 약간 덜 혼란
  4. 이 메서드를 호출하면 여전히 인수가 전송됩니까?
  5. 그렇다면 해당 인수는 이고 메서드 이름이 n 인 인스턴스입니까?

그리고 마지막으로 ... 주제 오프

당신이 방법이 있다면 ...

-(id)someMethod:(NSString *)pn 
{ 
} 
  1. (ID)가 무엇입니까? 그것은 컴파일러에게 어떤 타입의 객체도 반환 할 수 있다고 알려줍니까?

초보자를 도와 주셔서 감사합니다.

+0

예, 해당 메서드를 호출하면 인스턴스에 메시지를 보내고 예를 들어 n이라는 변수에있는 인수를 가져옵니다. id 질문에 관해서는, 그 말이 맞습니다. id는 어떤 객체도 될 수 있습니다. 당신은 어떤 물건을 얻을지 모를 때 사용됩니다. – Nerdtron

답변

1

당신은 이미 당신이 무슨 말을하는지 알고있다.

1.)이 메서드를 호출하면 여전히 인수가 전송됩니까?

추가 매개 변수를 전달하기 위해 여러 콜론을 추가 콜론 뒤에 무엇이든

예, ...

-(void)addOwnerNamesObject:(NSString *)n withSomeIntYouWantToPass:(int)value;

2) 그렇다면, 그 인수에게있는 NSString 인스턴스이다 그 메서드 이름을 'n'?

3)이 (ID)가 무엇입니까? 컴파일러에서 모든 유형의 객체를 반환 할 수 있다고 알려줍니까?, 목표 - C에서

객체가 유형이없는 위치 :

예, 당신은 이미 id의 자세한 설명과 함께 제공하는 매우 유효한 답변을 추가 할 수있는 NSObject의 또는 NSObject의

5

우선, basic Objective-C documentation을 살펴 봐야합니다.

Objective-C에서는 메서드 앞에 + 또는 - 부호를 붙일 수 있습니다.

+은 클래스 메소드이고, -은 예를 들어 메소드입니다.

그런 다음 반환 형식, 안쪽 괄호 및 메서드 이름이 있습니다.

- (int)foo; 

인스턴스 메소드는 int을 반환 foo라는.

유사한 C의 기능은 다음과 같습니다 당신이 인수를 할 때

목표 - C에서
int foo(void); 

는, 메소드 이름은 조금 특별하다. 예컨대

:

- (int)foo: (double)num; 

foo:라는 부재 법, int 복귀하고 num라는 double 인수 복용.

유사 C 함수 : 다중 인수하기

int foo(double num); 

:

- (int)foo: (double)num1 bar: (float)num2; 

foo:bar:라는 부재 법, int 복귀하고 num1라는 double 인수 및 num2라는 float 인수 복용.

유사 C 기능 : id에 대한 질문에 대해

int foo(double num1, float num2); 

, 그것은 단순히 방법의 반환 형식입니다.

id은 Objective-C 인스턴스에 사용되는 typedef입니다.
기본적으로 void *입니다.

id은 모든 클래스에 대해 Objective-C 개체 포인터를 나타냅니다.

1

먼저 메소드 이름의 대시 (-)는 인스턴스 메쏘드로이 메시지를 보낼 인스턴스가 필요하다는 것을 의미합니다. 호출은 다음과 같이 보입니다.

NSString * s = @ "a string"; [someInstance addOwnersNameObject : s];

이 경우 addOwnersNameObject 메시지에 NSString 인스턴스를 전달합니다.

ID무효 같다 * C.

에서
1

의 서브 클래스를 반환합니다 이는 근본적인 수준에서 객체와 대화 할 수있는 유형을 알 필요가 없다는 것을 의미합니다. 이것은 Objective-C와 C++의 가장 큰 차이점 중 하나입니다.

NSString *과 같이 일반적으로 코드를보다 쉽게 ​​읽을 수 있고 컴파일러에 의도를 나타 내기 위해 객체에 대한 포인터를 입력하여 이상한 점을 알리는 경우 적절한 경고를 제공 할 수 있습니다.

id은 개체에 대한 형식이없는 포인터입니다. 모든 오브젝트 유형은 id으로 전달 될 수 있으며 임의의 id 값은 3 스팅없이 오브젝트 포인터에 할당 될 수 있습니다. 시간의

99.99 %는 id는 객체의 99.99 %는 일반적으로 주위에 물건을 전달하지 않고 유형이없는 개체의 사실보다 상속의 사실을 사용할 수 있다는 것을 의미 NSObject에서 상속 이후 NSObject *로 대체 할 수있다. 그러나 NSObject은 객체와 프로토콜이기 때문에 조금 특별하며 일부 객체는 실제로 NSObject-NSProxy의 하위 클래스가 아니며 블록을 나타내는 클래스는 즉시 마음에 듭니다. 이 특수한 경우에는 거의 관심을 갖지 않지만 문법이없는 객체를 알려진 조상과 함께 전달하는 의미를 선호하기 때문에 id은 관례로 자주 사용됩니다.

+0

+1 매우 좋은 정밀도. – Macmade