티스토리 뷰

나름 프로그래밍?/ Objective-C

@property

알 수 없는 사용자 2010. 2. 8. 15:40
프로퍼티 (property)
- 외부에서 접근할 수 있는 객체의 속성

Objective-C에서는 인스턴스 멤버 변수들의 값에 편리하게 접근하기 위해
@property 라는 지시어를 사용한다.

선언 방식은 다음과 같으며 @interface 내부에 선언 된다.

- @property(속성) 타입 변수명; 
-(float)value;
-(void)setValue:(float)newValue;


↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
@property float value;
이와 같이 두가지 메서드를 선언한 것과 같은 기능을 하게 된다.

속성에는 다음과 같은 정의를 할 수 있다.

readwrite (Default)
property의 값을 읽고 쓸 수 있다는 것이다. 

readonly
property의 값을 단지 읽기만 할 수 있다고 정의 하는 속성.
이 속성은 @implementation 블럭 안에서 오로지 getter 메서드만 필요할 경우에 사용한다.
@synthesize 지시자를 사용하였을 경우에는 역시나 getter 메서드의 역할만을 하게 된다.
값을 대입 하려고 할 경우 에러를 출력.

assign (Default)
단순하게 값을 대입한다. 이전에 어떤 객체를 가리키고 있던 property라면 이로인해 해당 객체는
미아가 되어 메모리릭의 주범이 될 수 있다. 가비지 콜렉터를 사용하지 않는다면 사용을 피하는게 좋다.

retain
이것은 assign과 비슷하지만 조금 다르다. 이전에 가리키고 있던 객체가 있다면 해당 객체를 Release하여
메모리에서 제거한다. 가비지콜렉터를 사용한다면 결과적으로 assign과 동일한 결과를 가지겠지만 좀더
명시적으로 사용해주면 좋을 것이다.

copy
객체를 바로 대입하지 않고 해당 객체의 복사 메서드를 Invoke호출 한다.
그리하여 다른 메모리 영역에 복사본을 만든 다음 그것을 반환하게 된다.
이전에 가리키고 있던 값은 Release 시킨다.

nonatomic
이 속성은 접근자 메서드가 Atomic 하지 않게 동작한다.
(Atomic 이라는 말은 멀티스레드 등으로 구성된 프로그램이 특정 접근자 메서드를 호출할때 서로 충돌이 나지 않게
객체 레벨에서 Lock을 걸고 property에 접근하게 되는데 접근할대 마다 Lock을 걸고 다시 푸는 작업이 반복되므로
퍼포먼스를 저하시키는 결과를 가져온다.
이런 접근이 필요없다면 이 속성을 사용하여 Non-Atomic하게 동작하도록 만들어주는 것이 좋다.

간단한 예를 들어보겠다.
#import <Cocoa/Cocoa.h>

@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
-(NSString*) caption;
-(NSString*) photographer;

-(void) setCaption : (NSString*) input;
-(void) setPhotographer : (NSString*) input;

@end

위 코드를 property로 컨버팅하면 다음과 같다.

#import <Cocoa/Cocoa.h>

@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
@property (retain) NSString* caption;
@property (retain) NSString* photographer;

@end

'나름 프로그래밍? > Objective-C' 카테고리의 다른 글

프로퍼트 리스트 기록, 읽기  (0) 2010.02.11
NSDate 와 NSData  (0) 2010.02.10
클래스 메소드  (0) 2010.02.05
지정된 이니셜라이저 (designated initializer)  (0) 2010.02.05
객체의 초기화  (0) 2010.02.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함