티스토리 뷰
프로퍼티는 컴파일러가 자동 생성하는 접근자 메서드를 제어할 때 사용
-
원자성
-
자동 생성된 접근자 메서드는 기본적으로 메서드가 원자적으로 동작하게 만드는 데 락을 포함한다. 속성을 nonatomic으로 하면 락이 사용되지 않는다. Atomic 속성이 없더라도 명시적으로 원헀을 경우를 대비해 컴파일 에러 없이 원자성이 적용된다. 스스로 접근자 메서드를 정의하는 경우는 메서드가 원자적으로 동작하도록 구현해야 한다.
-
-
읽기/쓰기
-
read/wrtie 게터 세터 모두 사용한다. 프로퍼티가 자동 생성될 경우 컴파일러는 두 메서드 모두 생성한다.
-
readonly 게터만 사용한다. 그리고 컴파일러는 프로퍼티가 자동 생성될 때에만 게터를 생성한다. 프로퍼티를 외부에 일기 전용으로 공개하고 싶을 때 사용할 수 있으나 클래스 확장 카테고리에서는 내부적으로 읽기/쓰기로 재선언된다.
-
-
메모리 관리 시맨틱
-
프로퍼티는 데이터를 캡슐화한다. 그리고 그 데이터는 구체적인 소유권 시맨틱이 있어야한다. 이는 오직 세터에만 해당된다.
-
assign 세터는 CGFloat, NSInteger 같은 스칼라 타입에 사용하는 간단한 대입 연산이다.
-
strong 프로퍼티가 값을 소유한다는 것을 나타낸다. 새로운 값이 설정되면 먼저 그 값을 리테인하고 원래 값은 릴리즈한다. 그런 다음 리테인 한 새 값을 설정한다.
-
weak 프로퍼티가 값을 소유하지 않는 것을 나타낸다. 새로운 값이 설정되면 이 값은 리테인하지 않을 뿐 아니라 이전 값을 릴리스하지도 않는다. 이런 것은 assign과 비슷하지만 프로퍼티가 가르키던 객체는 언제든 파괴될 수 있고 파괴되면 프로퍼티는 nil로 설정된다.
-
unsafe_unretained 이것은 assign과 같지만 타입이 소유하지 않는 관게인 객체 타입일 때 사용된다. 이 관계는 대상 객체가 파괴되었을 때 weak와 다르게 값이 nil로 설정되지 않는다.
-
copy strong과 비슷하게 값을 소유한다고 나타낸다. 그러나 값을 리테인하는 대신 복사한다. 이것은 타입이 캡슐화가 잘 되어 있는 NSString일 때 가끔 사용된다. 세터로 전달된 값이 NSMutableString의 하위 클래스의 인스턴스일 수 있기 때문이다. 이와 같이 값이 가변 객체이면 프로퍼티에 설정된후에 객체의 인지 없이 객체 내용이 변경될 수 있다. 그래서 불변 복사본을 인자로 전달하면 문자열이 객체 내부에서 변경되지 않음을 보장할 수 있다. 가변일 수 있는 객체는 반드시 copy속성을 가져야한다.
-
-
출처 :
이펙티브 오브젝티브-C 2.0
'Tech > Objective-C' 카테고리의 다른 글
문자열 포맷 지정 (0) | 2020.04.22 |
---|---|
오브젝티브씨 isKindOfClass (0) | 2020.04.06 |
KVO (Key Value Observing) (0) | 2020.02.24 |
Objective-C id 타입 (0) | 2020.02.20 |
조건문와 반복문 (0) | 2020.02.12 |
- Total
- Today
- Yesterday
- leetcode
- ARC
- ios
- Xcode
- 애니메이션
- objective-c
- objc
- string
- ReactiveX
- wwdc
- SWIFT
- 딥러닝
- 스위프트UI
- 책 추천
- stanford SwiftUI
- 독서
- RX
- rxswift
- 머신러닝
- 스위프트
- swiftUI
- Algorithm
- 책 후기
- iOS SwiftUI
- 알고리즘
- 문자열
- Animation
- Deep learning
- swift5
- 책
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |