접근성 지원은 생각보다 똑똑하다.
label의 값이 10이라고 적혀져있을 때 "십"이 아닌 "열"로 읽을 줄도 안다.
@IBOutlet var strawberryLabel: UILabel!
let strawberryValue = strawberryLabel.text
let strawberryLabel.accessibilityLabel = "\(strawberryValue.text)개" // 열개
정확하게 어떤 설정을 했을 때 "열"이라고 읽혀지는 지는 잘 모르겠는데
더 찾아봐야겠다.
그리고 위 코드와 같이 작성하면 앱 실행중에 딸기의 개수를 줄여주면 그 줄여준 수량이 반영이 되어서 읽히지 않는데,
읽히는 label도 런타임에 유동적으로 변하게 하려면 어떻게 코드를 작성해야할지 고민해봐야겠다.
수정(쓰기)가 일어날 때 복사한다.
그 전에는 같은 메모리 주소를 공유함으로써 더 메모리를 아껴쓸 수 있다.
스위프트의 Collection Type에서 사용된다.
같은 메모리 주소를 공유한다는 말은
두개의 다른 변수가 같은 메모리 주소에 살고 있다는 말이다.
다른 변수가 같은 메모리주소를 공유한다는 것이 이해가 잘 안되는데...
어떻게 그게 가능하지?
참고
https://nsios.tistory.com/56 [NamS의 iOS일기]
weak
일 때랑 strong
일 때 차이점ARC와 강한 순환 참조에 대해 좀 더 공부해볼 수 있었다.
강한 순환 참조에 대해 정리한 글🤓
strong
을 써야 하는 경우복잡한 view heirachy를 가진 경우 weak
로 모든 connection을 주면
어떤 view가 어느 이유인지 모르게 메모리에서 해제된다면 view의 subview도 해제될 것이다.
따라서 strong
으로 연결해줘서 그런 상황을 방지할 수 있다.
즉, 복잡한 view heirachy를 가지는 경우
weak
을 써야 하는 경우메모리 부족으로 시스템에 의해 ViewController의 didReceiveMemoryWarning
가 호출될 경우
weak
로 연결된 뷰들은 해제될 수 있지만, strong
으로 연결된 뷰는 해제가 되지 않는다.
보통 mainView에 nil을 할당해줘서 mainView가 해제되면서 나머지 subview도 연쇄적으로 해제가 되는데, strong
일 경우 reference count가 1이라서 해제되지않고 남아있는다.
따라서 default로
weak
을 사용하자!
참고
Interface Builder IBOutlet연결에 Strong과 Weak 어떤것을 써야할까?
개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다. - 위키피디아 -
음 그러니깐, 앱 전반에서 쓰이는 상수인데,
상수의 이름이 겹칠거 같을 때 이름 공간을 만들어줘서
각 상수를 고유하게 식별할 수 있도록 돕는 장치라고 이해를 했다.
만약 다 리터럴로 쓰면 관리가 힘들고 안정성이 떯어지니깐...
스위프트는 namespace에 대한 솔루션을 제공하지는 않지만,
구조체와 열거형으로 namespace를 구현할 수는 있다!
그런데 이를 구조체의 static property로 구현을 하면,
struct는 이니셜라이즈 될 수 있으니, 같이 일하는 개발자 입장에서 응? 뭐지 혼란 스러울 수도 있다는 단점이 있다. (private init
으로 구현해주면 되긴 함)
반면 열거형의 static property로 구현을 하면,
이니셜라이즈할 일 도 없으니, 사용이 깔끔! 하다는 장점이 있다.
enum Identifier {
static let entryCell = "entryCell"
static let entryDetailView = "entryDetailView"
}