본문 바로가기
프로그래밍 놀이터/iOS

[iOS] __bridge 와 __bridge_transfer

by 돼지왕 왕돼지 2017. 6. 21.
반응형

 [iOS] __bridge 와 __bridge_transfer


http://stackoverflow.com/questions/17544765/when-to-use-bridge-transfer-and-bridge

https://soulpark.wordpress.com/2013/07/25/ios-arc-from-top-developer/


arc, CFRelease, core foundation api, Free, IOS, Keyword, non-objective-c, Object-C Class, pointer, toll-free birdged type, [iOS] __bridge 와 __bridge_transfer, __bridge, __bridge_retained, __bridge_transfer, 소유권, 소유권 처리, 캐스팅


-

__bridge 와 __bridge_transfer 는 ARC 에게 소유권 처리에 대해 알리는 keyword 이다.

보통 non-objective-c pointer 에 붙어서 사용된다.



-

__bridge 는 ARC 에게 해당 포인터에 대해 소유권을 갖지 말라고 알려주는 것이다.

이렇게 마킹한 녀석은 사용자 측에서 알아서 free 나 CFRelease 등을 사용해서 메모리 해제를 해주어야 한다.



-

__bridge_transfer 는 __bridge 와 반대로 ARC 에게 해당 포인터에 대한 소유권을 가져가라고 알리는 것이다.

이 경우는 다른 objective-c object 처럼 우리는 메모리 관리를 신경쓰지 않아도 되겠다.



-

Core Foundation API 와 Objective-C 클래스간의 상호 캐스팅이 가능한 것들이 있다.

이런 것들은 ARC 에게 메모리 관리 책임을 맡길 수 있다.

( 이런 클래스를 toll-free bridged type 이라고 부른다. )



-

toll-free bridged type 이 타입 캐스팅을 할 때 ( objective-c -> core foundation 이든 반대든 )

ARC 에게 메모리 관리 책임에 대해 알려줄 필요가 있고,

이 때 사용하는 keyword 가 __bridge, __bridge_transfer, __bridge_retained 이다.



-

__bridge_retained 는 __bridge_transfer 와 반대로 objective-c object 가 core foundation object 로 캐스팅 될 때 사용되는데, ARC 가 아닌 개발자에게 메모리 해지의 책임이 전가된다.




반응형

댓글