2012-09-13 6 views
0

MyClass의 문자열 값이 변경되면 코드를 추가해야합니다. 그래서 MyClass의 문자열 속성 메서드를 재정의하려고합니다. 하지만 나는 잘 모르겠다. 그래서 나는 다음과 같이한다. 맞습니까?속성의 메서드를 재정의 할 수 있습니까?

속성의 메서드를 재정의하는 방법은 무엇입니까?

@interface MyClass{ 
    NSString *string; 
} 

@property(retain, nonatomic) NSString *string; 
@end 


@implementation MyClass 

- (void)setString:(NSString*)newString{ 
    // want to add some codes. 

    [self setString:newString]; <= Is this correct? 
} 

@end 

답변

0
- (void)setString:(NSString*)newString{ 
    // want to add some codes. 

    string = newString; //This is the setter method! 
    // You will need to consider memory management etc. 
} 

당신은 아마 무엇보다 업이되는 :이 곳에서

- (void)setString:(NSString*)newString{ 
    // want to add some codes. 

    [super setString:newString]; 
} 

[self setString:newString]는 무한 재귀 루프가 될 것입니다. [super setString:newString]은 superlass 'setter를 호출해야합니다. 그러나 나는 결코 그렇게하지 않았다.

+0

위의 코드는 속성의 인수를 고려하지 않는다고 생각합니다. 예) 보관, 복사, 비 원자학 등 –

+0

네, 맞습니다. 나는 대답을 고쳐 줄거야. 나는 네가 무엇을하고 있는지 지금 이해하고 있다고 생각한다. –

0

당신이하려는 것은 재정의하지 않는 것입니다 (코드 스 니펫에 하위 클래스가 포함되어 있지 않습니다).

코드에있는 내용은 @interface이라는 선언과 @implementation의 정의입니다. 그것은 C에서의 선언/정의와 동일한 의미와 유틸리티를 가지고 있는데 여기에는 .h 파일에 선언을 넣고 .c 파일에 정의를 넣습니다.

당신이 합성하는 방법을 말하는 것으로 가정하면 코드는 거의 정확합니다. 당신은 방금 getter - (NSString *) string; 또는 읽기 전용 무엇을 누락되었습니다.

당신은 사용해야 제대로 임무를 수행하는 방법에 대한 것과 =

- (void)setString:(NSString*)newString{ 
    // want to add some codes. 

    string = newString; // Correct way of doing it 
} 

propertie를 합성하는이 방법은, 어느 문법 설탕 @synthesize를 사용하여 손이나 중 하나에 의해 세터와 게터를 정의하여이 .

더 나은 이해를 위해 @property@synthesize은 모두 구문 설탕입니다. (단지 @property이 retain, strong 등의 의미를 추가하고 있습니다).

더 나은 문서를 읽는 것이 좋습니다. 더 많은 정보를 얻을 수있는 웹 페이지가 많이 있습니다.

관련 문제