u 프로퍼티

n         프로퍼티 선언

Property 사용하기 위해서 일반적으로 @property 지시자와 @synthesize 지시자를 함께 사용

@property 지시자는 클래스의 @interface 내부에 선언하며 다음과 같은 형식으로 선언

@interface MyClass : NSObject
{
    float value;
}
@property float value;

@end

 

@property float value

위의 선언은 다음과 같이 두가지 메서드를 선언한것과 같은 기능

- (float)value;

- (void)setValue:(float)newValue;

 

n         @synthesize

구현부안에 getter, setter를 지정안했을경우@synthesize를 통해 컴파일러에게 작성을 지시함

- 주의

  @synthesize를 사용안할 경우 직접 구현부에 getter, setter를 작성해야 컴파일 가능하나

  문제가 발생할 여지가 있으므로@synthesize사용을 권장

 

n         @property 지시자의 attributes

- getter=gettername

기본적으로 Property getter 메서드 명은 Property 자신의 이름과 동일 ( : Property foo일 경우 foo) 하지만 이 기본 설정을 내가 원하는 메서드명으로 변경 할 수 있습니다.

- setter=settername

Property setter 메서드 명은 setPropertyName: 입니다. ( : Property foo일 경우 setFoo:)

역시나 이 기본 설정을 내가 원하는 메서드명으로 변경 할 수 있습니다.

- readwrite (DEFAULT)

Property의 값을 읽고 쓸 수 있다는 것입니다. 이 설정은 기본 설정입니다.

- readonly

Property의 값을 단지 읽기만 할수 있다고 정의하는 속성입니다.

이 속성은 @implementation 블럭 안에서 오로지  getter 메서드만 필요할 경우에 사용합니다.

@synthesize 지시자를 사용하였을 경우에는 역시나 getter 메서드의 역할만을 하게 됩니다.

값을 대입 하려고 할 경우 에러를 출력하게 됩니다.

- assign (DEFAULT)

단순하게 값을 대입합니다. 기본설정입니다.

이전에 어떤 객체를 가리키고 있던 Property라면 이로 인해 해당 객체는 미아가 되어 메모리릭의 주범이 될 수 있습니다.

가비지콜렉터를 사용하지 않는다면 사용을 피해야 합니다.

- retain

이 것은 assign과 비슷하지만 조금 다릅니다.

이전에 가리키고 있던 객체가 있다면 해당 객체를 Release하여 메모리에서 제거 합니다.

- copy

객체를 바로 대입하지 않고 해당 객체의 복사 메서드를 Invoke호출합니다.

그리하여 다른 메모리 영역에 복사본을 만든 다음 그것을 반환하게 됩니다.

이전에 가리키고 있던 값은 Release 시킵니다.

- nonatomic

이 속성은 접근자 메서드가 Atomic 하지 않게 동작하게 합니다.

기본적으로 접근자는 Atomic하게 동작합니다.

Atomic 이라는 말은 멀티스레드 등으로 구성된 프로그램이 특정 접근자 메서드를 호출할때 서로 충돌이 나지 않도록 객체 레벨에서 Lock을 걸고 Property에 접근하게 됩니다.

이런 접근이 필요없다면 이 속성을 사용하여 Non-Atomic하게 동작하도록 만들어 주시는 것이 좋습니다.

- dealloc

객체가 제거 될때 소멸자로 dealloc 호출되는데 Property들이 자동으로 소거되지 않아

명시적으로 제거해 주셔야 합니다.

- (void)dealloc {
    [property release];
    [super dealloc];

}

 

n         재선언

서브클래스에서 슈퍼클래스의 프로퍼티의 재선언 가능

속성 선언을 다시 해줘야함

 

n         Markup and Deprecation

@property CGFloat x

AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4;

@property CGFloat y __attribute__((...));

 

 

 

 

Posted by 김반장78
,