2014-01-07 5 views
0

안녕하세요 저는 Objective-C 프로그래밍의 초보자입니다. 오늘 나는 프로그램을 쓰고 있었고, 나는 그것이 행동하는 방식과 꽤 혼란 스럽다. 내가 getStr 그것은 나에게 오류를 제공 합성 접근을 사용하여 STR 값을 인쇄하려고하면NSString 유형의 인스턴스 변수에 대해 합성 된 getter가 작동하지 않습니다.

#import <Foundation/Foundation.h> 
@interface MyClass:NSObject 
{ 
    NSString * str; 
} 
@property NSString * str; 
@end; 

@implementation MyClass 
@synthesize str; 
@end 

int main() 
{ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init]; 
    MyClass * obj = [[MyClass alloc]init]; 
    [obj setStr: @"hello"]; 
    /* the following lines of code will give error if not commented but why it is      
    resulting in error ????? 
     NSLog(@"Str = %@",[obj getStr]); // **gives error if not commented** 
     **or** 
     NSString * temp; 
     temp = [obj getStr]; // gives error 
     NSLog(@"%@",temp); 
    */ 
    NSString * temp; 
    temp = obj.str; 
    NSLog(@"%@",temp); // works just fine 
    [pool drain]; 
    return 0; 
} 

주요 기능에서 다음은 프로그램입니다. 왜 그렇게? NSString에 합성 된 getter을 사용하거나 올바른 방법으로 getter을 사용하지 않습니까? 그러나 여전히 합성 된 setter[obj setStr]NSString 유형의 값을 설정합니다. 스택 오버 플로우에 대한 이런 종류의 질문에 대한 답을 보았지만 실제로 제공되는 답변을 이해할 수 없으므로이를 간단한 방식으로 설명해주십시오. 많은 감사합니다.

답변

2

속성 xyz의 합성 된 getter의 이름은 속성의 이름과 동일합니다 (예 : xyz). 이 아닌getXyz입니다. 만 세터는 코드

NSLog(@"Str = %@",[obj getStr]); 

컴파일되지 않는 이유 즉 setXyz:

되고,는 "세트"로 시작됩니다.

NSLog(@"Str = %@",[obj str]); 

으로 변경하십시오.

참고 : Xcode에서 속성을 합성하게하면 해당 속성을 "되돌릴"변수도 만들어집니다. 속성 str 외에도 인스턴스 변수 str을 선언 할 필요가 없습니다.

+0

TNX에 많이 있습니다. 속성 xyz에 대한 합성 된 getter의 이름이 속성의 이름과 같은지는 알지 못합니다. Thnx. – iamyogish

0

이 메서드는 getter 메서드 호출 temp = [obj getStr];이 아닙니다. Getter 메서드는 [obj str]) 또는 점 표기 obj.str에 의해 트리거됩니다. 그러나 수행 한 경우 getStr을 정의한 다음 수행 한대로 사용할 수 있습니다.

+0

tnx 나는 그것을 얻었다 :) – iamyogish

0

속성의 getter와 setter에 액세스하는 또 다른 방법 :

//getter 
NSLog(@"Str = %@",self.str); 

//setter 
self.str = @"hello";