"iOS와 OS X의 메모리 관리와 멀티스레딩 기법"에서는 블록은 Objectvice-C 객체라고 설명을 쭉~~해준다. 한번 읽어보시길..
두번 읽어 봤는데 사실 5번 더 읽어 봐야겠다..
객체이기 때문에 데이터 영역(_NSConcrete GlobalBlock), 스택(_NSConcreteStackBlock), 힙(_NSConcreteMallocBlock) 등 존재 할 수 잇다. 1장에서 우리가 쓴 형태는 _NSConcreteStackBlock 클래스 형태를 사용해서 스택 영역에 생겼다.
스택영역..{}를 벗어나면 지역 변수 및 그 안에 있는 코드는 폐기된다..그런데..__block 변수와 블록은 스택에서 힙으로 복사(copy)를 하는 기능을 제공한다.
ARC 환경에서는 컴파일러가 자동으로 필요한 부분을 발견하고 블록을 스택에서 힙으로 복사를 한다.
그런데 copy..이거 때문에 순환참조를 조심해야 한다.
_strong 속성의 객체형 자동 변수를 사용하는 블록이 스택에서 힘으로 복사될 때, 블록은 해당 객체의 소유권을 갖는다. 하지만 이 때문에 순환 참조가 발생할 수 있 다.
소유권과 순환참조를 알고 싶으면..
https://popopo.tistory.com/126
객체의 기본은 strong 이기 때문에 블록 copy 될 때마다 count 1 씩 증가
ARC 환경에서는 블록 코드가 언제 카피되고 언제 사라지는 컴파일러가 알고 있기 때문에 가능 하다.
순환 참조를 피하기 위해서는 __weak 속성으로 변수를 선언하고 그 변수에 self를 할당하면 된다.
참고 문헌
"iOS와 OS X의 메모리 관리와 멀티스레딩 기법"
'개발 블로그 > 아이폰개발' 카테고리의 다른 글
[iOS 앱 내 구입] iOS 앱 내 결제 시스템을 구현하면서 필수 고려할 사항 정리 (2) | 2019.12.04 |
---|---|
[iOS] App Lifecycle( 앱 생명주기) (0) | 2019.11.27 |
[iOS DateFormatter Locale] Date->String Locale identifier 사용표 (0) | 2019.11.21 |
[swift Date, DateFormatter] Date->String , String->Date 일때 locale(identifier), TimeZone(abbreviation) 관계 (0) | 2019.11.21 |
[Swift Date] 예약과 유저에게 보여줘야 할 DateFormatter TimeZone 설정 (0) | 2019.11.20 |
[Objectvie-c 의 블록] objectvie c 블록[block] 1장. (0) | 2019.11.08 |
frame 과 bounds 차이라면..? Swift, Xcode, iOS 개발 (0) | 2019.10.30 |
델리게이트(Delegate) 위임 패턴이란? (0) | 2019.10.23 |
ARC, 순환참조와 소유권 지시어 (iOS, xcode) (0) | 2019.10.22 |
iOS13 dark mode(다크모드) 설정시 xcode로 대응 방법 (0) | 2019.10.22 |
댓글