@IBOutlet과 @IBAction을 모아서 인터페이스 빌더 어노테이션(Interface Builder Annotation)이라고 부른다.
이는 처음에 앱이 빌드 될때 컴파일러가 체크한다. 연결정보를 찾아서 인터페이스 빌더의 객체와 서로 연결해 준다.
화면상의 객체를 소스코드에서 참조하기 위해 사용하는 어노테이션이다. 주로 객체의 속성을 제어하기 위한 목적으로 class의 property에 연결한다. @IBOutlet으로 정의된 property를 아울렛 변수라고 부른다.
@IBOutlet var uiTitle : UILable!
IBOutlet 연결 시 Storage값을 정하는 항목이 있다.
Strong과 Weak는 메모리 회수정책에 차이가 존재한다.
@IBOutlet var uiTitle : UILable!
기본적으로는 Strong값이 default이다. Strong으로 선언된 변수는 다른 곳에서 참조되고 있는 경우 메모리에서 사라지지 않는다.
@IBOutlet weak var uiTitle : UILable!
Weak
- 다른 곳에서 참조되고 있더라도 시스템에서 임의로 제거 할 수 있다.
Weak 타입으로 선언된 변수는 간혹 값을 할당 해 주었는데도 사라지는 경우가 있다. (한참 고생함)
그런데 Weak 타입이 왜 필요한 걸까?
Strong 타입 객체들끼리 상호 참조가 존재하는 경우, 앱이 실행되는 한 영원이 메모리에서 제거되지 않는다. 이는 메모리 누수로 이어진다.
이후 ARC(Auto Referencing Counter) 참고하기
@IBAction는 이벤트를 제어할 때 사용하는 어노테이션이다. 일련의 프로세스를 실행하는 목적을 가진다. 이를 위해 method와 함께 사용되는데 이를 액션 메소드라고 한다.
@IBAction func nextButtonTouched(_ sender: Any) { }
객체의 속성을 제어할 때 ) Outlet
객체의 이벤트를 연결할 때 ) Action