- class: 참조타입 - 연결되어있다
- struct: 값 타입, 값이 복사된다 (init 기본 제공) - 연결되어있지않다 다른 객체 생성 가능
class에는 상속 개념이 있다.
똑같은 값이 들어가는것을 막기 위해서 상속
struct는 상속 불가
사용자 토큰을 만들면
홈페이지, 마이페이지 등 여러 페이지와 연결하는데,
보통 엑세스토큰의 만료기간을 1일로 잡아놓는다
앱을 종료하지 않고 이틀 뒤에 들어오면 토큰 재발급을 해야한다
재발급을 한번에 할 수도 있는데, 이때 토큰이 한번에 갱신이 되야하는데
잘 안될 수 있다.
그래서 이 토큰 공유자원을 잘 동기화를 시켜줘야한다.
순차적으로 잘 처리할 수 있도록!
그래서 class와 struct의 개념이 중요하다.
있을수도있고 없을수도있다
nil을 넣어도 된다
weak를 쓰지 않으면 strong으로 강한 참조가 되서
참조를 할당하면 참조가 1씩 증가한다
그래서 denit이 되지 않는다
weak키워드를 사용하게되면 참조를 하긴하는데 카운트는 증가시키지않는다
카운트가 0이되면 denit이 호출된다
일반적으로 강한 참조로 생성하게 되는데, 강한 참조를 추가하게되면 메모리에 계속 남아있기 때문에 메모리누수가 발생할 수 있다
이런것들을 잘 관리하는게 개발자의 중요한 업무가 되겠다!
참조카운트를 증가시키지않으면서 자동으로 메모리를 해제하고싶다면 weak라는 키워드를 붙여주면 된다
대신 weak는 항상 optional타입으로 만들어줘야한다
안그럼 compile error를 발생시킨다
수정) delegate(AnyObject를 상속받은 프로토콜을 준수한 객체)를 weak로 선언하지 않았다고 해서 컴파일 에러가 나지는 않는다
optional타입의 초기값은 nil값이기 때문에 신경?써야한다
class는 상속을 할 수 있다보니까 view controler에 대한 기본 설정을 해줄때
navigationbar같은건 매번 설정할 필요가 없으니까 하나 class로 만들어놓고 상속을 받는거다.
화면마다 navigationbar에 있는 글자는 달라질 수 있으니까 이건 오버라이딩(다형성)으로 설정할 수 있다
access토큰이 만료됐을때
5군데에서 쓴다고 하면 메모리도 5번 올라가고 동기화가 제대로 안될 수도 있다
그래서 이런 공유자원관리차원에서 class를 사용한다.
class는 하나만, 참조변수는 여러개 만들어서 메모리는 하나만 들고 공유되는 자원을 동시에 접근할 수 있다!
동기화가 잘 될 수 있도록…