objective-c Xcode에서 @property 관련 매개 변수에 대한 설명

4128 단어 Objective-C
objective-c는 대상이 구성원 변수를 가지고 있을 때 코드의 봉인을 유지하기 위해 구성원 변수를 @protected로 설정하고 구성원 변수에 setter와getter 방법을 작성합니다.
예:
@interface Person : NSObject

{

    @protected

    int _age;

}

- (int)get;

- (void)setAge:(int)age;

@end



@implementation Person

- (int)get

{

    return _age;

}

- (void)setAge:(int)age

{

    _age = age;

}

@end

Xcode에서 이러한 무미건조한 포맷 코드에서 벗어나기 위해 @property 속성 설정을 추가하고 @property 속성을 사용하면 컴파일러가 자동으로 이 코드를 실현할 수 있습니다.
예:
@interface Person : NSObject

@property int age;

@end



@implementation Person

@end

이 코드는 컴파일러를 거쳐 컴파일된 후 위의 코드와 완전히 같다.
그러나 실제 응용에서 메모리 관리, 다중 루틴, 구성원 변수가 읽기만 하는지 여부 등 수요가 많기 때문에 @property는 우리에게 이러한 서로 다른 수요를 실현하기 위해 많은 파라미터를 제공했다. 다음과 같다.
1. 메모리 관리 관련 사항:
*retain:release 이전 값,retain 새 값(대상 형식에 적용되는 구성원 변수)
*assign: 직접 값 부여(기본 매개 변수, 기본 데이터 형식에 적용되는 구성원 변수)
*copy:release 이전 값, copy 새 값
참고: 메모리 관리 정보http://www.cnblogs.com/yoran-yang/p/4293546.html
retain을 예로 들면 다음과 같습니다.
@interface Person : NSObject

@property (retain) Book *book;

@end

다음과 같습니다.
@interface Person : NSObject

{

    @protected

    Book *_book;

}

- (Book *)get;

- (void)setBook:(Book *)book;

@end



@implementation Person

- (Book *)get

{

    return _book;

}

- (void)setBook:(Book *)book

{

    if(book != _book)

    {

        [book release];

        _book = [book retain];

    }

}

@end

2. 읽기와 쓰기 제어 관련
*readwrite: Getter와setter의 성명과 실현을 동시에 생성합니다 (기본 인자)
*readonly:getter 방법만 생성
3. 다중 스레드 관련
*nonatomic: 다중 루틴 금지, 변수 보호, 성능 향상, 구성원 변수 읽기와 쓰기 작업 효율 수 배 증가(다중 루틴이 아닌 프로그램에 이 파라미터를 추가하는 것을 강력히 권장)
*atomic: 라인이 안전하고 성능이 낮음(기본 파라미터는 라인 안전, 즉 가선 자물쇠)
4.setter 및 Getter 메서드의 이름
*Getter = (Getter 메서드 이름)
*setter =(setter 메서드 이름) 참고: 이 메서드 이름은 뒤에 ":"을 붙여야 합니다.

좋은 웹페이지 즐겨찾기