2010-12-27 6 views
3

회원 변수가있는 objective-c 클래스가 있습니다. 나는 각각 하나에 게터와 세터를 만들고있다. 대부분 학습 목적입니다. C++로, 그러나Objective-C 멤버 변수 할당?

- (void) setSomething:(NSString *)input { 
something = input; 
} 

내가 과거에 일한 다른 언어, 당신은 this->something = input처럼 this 포인터를 사용하여 멤버 변수를 참조 할 수 있습니다 : 내 세터는 다음과 같습니다. objective-c에서 이것은 self으로 알려져 있습니다. 그래서 그와 같은 것이 객관적으로 가능할 지 궁금합니다.-c? 이런 식으로 뭔가 :

- (void) setSomething:(NSString *)input { 
[self something] = input; 
} 

하지만 그건 something에 대한 게터를 부를 것이다. 그래서 나는 잘 모르겠다. 그래서 내 질문은 :

자기 포인터를 사용하여 할당 할 수있는 방법이 있습니까?

그렇다면 어떻게됩니까?

악의적 인 행동인가요?

감사합니다.

답변

4

예, 그것은 this 대신에 self로, C++와 같은 구문을 사용 : 당신은 효과적으로 "자기"암시 적으로 사용 사용하고

self->something = input; 
+4

그러나'self->'는 필요하지 않으며 아무도 실제로 그런 코드를 작성하지 않는다는 것을 언급 할 가치가있다. – benzado

+0

실제로, 우리 중 일부는 실제로 'self'를 사용하여 객체 구성원과 로컬 변수를 구별하여 컨텍스트를 명확하게 만듭니다. –

2

...

something = input; 

... "무언가"변수가 없다면. (예 : 명시 적으로 "자체"를 추가 할 필요가 없으며 사람들은 일반적으로 그렇지 않습니다.)

즉, 코드 샘플은 입력을 유지하지 않으므로 실제로는 아무 것도하지 않을 것입니다 당신은 (물론, NSString의 경우에 충돌없이 오랫동안) 기대한다. 이와 같이

, 당신이 정말 자신의 세터 (property/synthesize가 설정 한 목표 - C는 많은 덜 번거 로움입니다), 당신은 같은 것을 사용해야합니다 작성하려는 경우 :

- (void) setSomething:(NSString *)input { 
    if(something != input) { 
     [input retain]; 
     [something release]; 
     something = input; 
    } 
} 
+0

이전 값을 해제하고 새로운 (보유 된) 값을 할당하는 것 사이의 유효하지 않은 객체 간격을 피하기 위해, 하나의 관용구는 이전의'무언가'를 자동 해제하는 것입니다. – Richard

+1

일반적으로 문자열을 유지하는 대신 문자열을 복사하는 것이 더 적절합니다. – d11wtq