BIBI BLOG
[Objective-C]인스턴스 변수의 접근 권한 및 속성(propert) 본문
728x90
■인스턴스 변수의 접근 권한
Objective-C에는 접근 권한과 관련된 '컴파일러 지시문(compiler directive)'라고 존재하는데, 이를 사용하여 인스턴스 변수의 접근권을 설정할 수 있습니다. 준비되어 있는 접근 권한 컴파일러 지시문에는 이하와 같은 것이 있습니다.
@private
외부로부터 완전히 은폐되어 사용할 수 없습니다. 클래스 내에서만 이용하는 경우에 사용합니다.
@protected
이 클래스와 서브 클래스 내에서만 사용할 수 있습니다.
컴파일러 지시문을 지정하지 않으면 기본적으로 @protected와 같기 때문에 @protected 쓰지 않아도 됩니다.
@public
외부에 공개되어 자유롭게 이용할 수 있습니다. 가장 제약이 없습니다.
@interface 클래스 {
@public
... public으로 변수 선언 ...
@protected
... protected하는 변수 선언 ...
@private
... private으로 변수 선언 ...
}
클래스의 인스턴스 변수에 액세스하려면 「->」를 사용합니다.
TestClass* obj = [TestClass myTestClass];
obj->message = @"Test Message";
■속성(propert)
속성은 인스턴스 변수에 액세스할 수단을 제공하는 '접근자 메소드 자동 구현 기능' 입니다.
※객체가 자신의 내부 속성값에 대해 읽거나 쓰게 하기 위해 제공하는 메소드를 접근자(accessor) 메소드라고 합니다.
@property (속성) 타입 속성명;
종류 | 옵션 | 설명 |
메소드 이름 지정 | getter=[메소드 이름] | getter/setter 메소드 함수 이름을 별도로 지정 |
setter=[메소드 이름] | ||
gatter/setter 지정 | readonly | 읽기 전용 |
readwrite | 일기쓰기,기본값 | |
값 설정방법 | weak | 약한 참조,[removeFromSuperview]이용해 제거하면 메모리도 해제된다. 객체를 소유하지 않고 주소만 가지는 포인터 개념. |
strong | 강한 참조,[removeFromSuperview]이용해 제거해도 메모리는 해제되지 않는다. 객체를 소유하여 레퍼런스 카운터가 증가하는 프로퍼티. |
|
copy | 멤버변수가 인스턴스 포인터 값을 가질때, 인스턴스 복사 | |
동시성 | atomic | getter/setter는 선형 스레드를 통해 독립 실행 |
nonatomic | getter/setter는 다중 스레드를 통해 동시 실행 가능 |
※atomic 한 접근은 해당 값에 쓰기를 할 때 락을 걸어서 여러 스레드에서 동시에 액세스할 때 예기치 않게 데이터가 파괴되는 상황을 방지할 수 있지만 그만큼 로드도 많이 걸리게 되므로 특별한 경우를 제외하고는 잘 쓰이지 않는다.
※iOS5이후로 ARC로 인해 retain과assign프로퍼티는 사용되지 않는다.
728x90
'iOS > Objective-c' 카테고리의 다른 글
[Objective-C]NSDate와 날짜다루기 (0) | 2020.10.05 |
---|---|
[Objective-C]NSMutableString다루기 (0) | 2020.10.02 |
[Objective-C]NSString다루기 (0) | 2020.10.01 |
[Objective-C]클래스 만들기 (0) | 2020.09.29 |
Objective-C란? (0) | 2020.09.28 |
Comments