Objective-C 기본 노트 (2) @property 및 @synthesize

@property와 @synthesize로 이루어진 이전 편의 코드를 붙이고 이 두 키워드의 사용법과 의미를 설명합니다. 코드는 다음과 같습니다.
Person.h 파일
#import <Foundation/Foundation.h>

@interface Person : NSObject {
    int _age;  //       
    //                int _no     (       )
}

@property int age;
@property int no;

//         
- (id)initWithAge:(int)age andNo:(int)no;

@end
P
erson.m 파일
#import "Person.h"

@implementation Person

//Xcode 4.5          (   ,     _age _no)
//@synthesize age = _age; //   protected
//@synthesize no = _no; //         

- (id)initWithAge:(int)age andNo:(int)no {
    if(self = [super init]){
        _age = age;
        _no = no;
    }
    return self;
}

- (NSString *)description {
    return [NSString stringWithFormat:@"age is %i and no is %i", _age, _no];
}

@end
main.m 파일
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *person = [[Person alloc] initWithAge:15 andNo:2];
        
        NSLog(@"age is %i and no is %i", person.age, person.no);
        
        [person setNo:3];
        NSLog(@"no is %i", [person no]);
        //%@      OC  
        NSLog(@"%@", person);
    }
    return 0;
}
결과:
2014-11-12 21:53:15.406 firstOCProj[826:47802] age is 15 and no is 2
2014-11-12 21:53:15.407 firstOCProj[826:47802] no is 3
2014-11-12 21:53:15.408 firstoCProj[826:47802] age is 15 and no is3에서 볼 수 있듯이 위의 코드가 많이 간결해졌다. @property의 역할은 구성원 변수에 대한 성명과 같고 @synthesize의 역할은 구성원 변수 setter와 Getter의 표준에 대한 실현과 같다.
주의해야 할 점:
1. Xcode4.5 이상은 @synthesize 속성을 쓰지 않아도 됩니다. (컴파일러 기본 추가)
2. 이런 기법은 앞의 기법(옛 기법)과 교차하여 사용할 수 있다.
3. setter나 Getter 방법에 대해 특별한 처리를 하려면 낡은 문법을 사용할 수 있다(컴파일러는 기본적으로 우리를 도와 실현하지 않는다).
4. 명시적인 성명 변수가 없으면 기본적으로 개인 구성원 변수가 생성됩니다(위의 no와 같은 클래스에서 사용할 수 없습니다).
다음은 위의 코드를 좀 더 간단하게 보여 드리겠습니다.
Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property int age;
@property int no;

@end
Person.m
#import "Person.h"

@implementation Person

@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *person = [Person new];
        [person setAge:20];
        [person setNo:3];
        NSLog(@"age is %i and no is %i", person.age, person.no);
    }
    return 0;
}
결과:
2014-11-12 22:14:44.002 firstoCProj[849:52867] age is 20 and no is 3 주의: 나의 컴파일러 Xcode는 4.5 이상이기 때문에 Person을 생략할 수 있습니다.m의 @synthesize 속성입니다.
여기는 OC와 Xcode 컴파일러에 감탄하지 않을 수 없습니다. 이렇게 편리하고 좋은 도구는 정말 처음 봤어요. 묵묵히 칭찬해 주세요.

좋은 웹페이지 즐겨찾기