2010-05-07 3 views
6

Objective-C에서 "self"를 사용하고 있습니까? 아니면 좋은 방법일까요? 나는 그것을 전혀 사용하지 않을 때마다 사용하지 않았기 때문에 실제로 어떤 차이도 느끼지 않는 것 같습니다. 그것은 어쨌든 암시되지 않습니까?"자가"가 필요합니까?

+0

을 뜻합니까 'self.property = value'에서 'property = value'로 변경합니까? – JBRWilkinson

답변

5

self이 필요합니다. getter/setter를 통해 속성에 액세스하는 것이 가끔 도움이되는 경우이 경우 self.propertyname 또는 self.propertyname = value처럼 self을 사용해야 할 수도 있습니다. (다음은

+0

점 표기법 대신 메시지 표기법을 사용하면 어떨까요? 그게 그렇게 중요한 건가? – Rob

+0

Nope. 아직도 자기가 필요해. –

+0

정말 명확한 답변입니다. 웹의 많은 자습서에서 모두 같은 것을 말하기 때문에 답변을 주셔서 감사합니다. – gbk

3

인스턴스 변수를 참조 할 때 필요하지 않습니다. 당신이 대리인을 설정할 때처럼, 다른 방법으로 현재 객체의 참조를 전달 할 때 필요하다 :

[someObj setDelegate:self]; 

현재 객체에서 같은 클래스의 메소드를 호출 할 때 그것은 또한 필요가있다 :

+2

인스턴스 변수에 지정할 때 setter를 사용하여 복사 또는 보관하는 경우 self를 사용해야합니다. –

0

[self doMethod] 
예, 목표 C는 방법은 C/C++처럼 호출하지만

[자기 해봐요] 같은 상황에있어, 자기 보내는 메시지를 사용하지 않기 때문에, 및 self.myProperty;

이 필요합니다.

ivar에 액세스하는 경우 자체는 필요하지 않습니다.

희망이 있습니다.

가 달려 변수를 처리하기위한 -CV

1

. 합성 된 getter 또는 setter를 사용하려면 자체에 도트 표기법을 사용하십시오. 당신이, 음, self에게 메시지를 보낼 개체에 대한 원한다면

self.someProperty = @"blah"; //Uses the setter 
someProperty = @"blah"; //Directly sets the variable 
+0

도트 표기법을 사용할 필요가 없습니다. 그러나 우리 중 많은 사람들이 그것을 좋아합니다. 하지만 나는주의를 기울인다 : 객체에 메시지를 보내는 것과는 반대로 포인터가 아닌 구조체에서 필드에 액세스하는 것처럼 점 표기법이 거의 보인다. Objective-C 객체는 구조체에 대한 포인터이기 때문에'self.someiVar = @ "this"는 인스턴스 변수에 액세스 할 수 없습니다. 'self-> someiVar = @ "this"'(클래스의 구현 내에서'self->'비트는 불필요합니다)를 사용합니다. 그래서, 당신이하고있는 일과 당신이하지 않는 것을 이해한다면 점 표기법을 사용하십시오. –

1

Actualy이 필요 할 때마다 없습니다. propertyname 또는 propertyname = value에 해당 아니지만, 그것은 좋은 연습이다, 그것은 쉽게 다른 사람의 코드를 읽을 수 있기 때문이다.

그리고 필요가있다 당신이 다른 클래스에 같은 이름을 가진 객체가있을 때, 다음 "자기"keywork는 같은 클래스의 객체를 참조하는 소프트웨어를 말할 것이다. 일반적으로 더 큰 프로젝트에 happends

을.