-
[iOS] Block의 캡쳐링과 __block앱등이에게 살충제를 뿌린다./iOS 2016. 1. 17. 18:07
__block이 Block의 캡쳐링에 미치는 영향에 대해서 알아보자
결과는 : 23 42 17이 나오게 된다.
결과는 : 17 17 17 이 나오게 된다.
왜냐하면 Block은 생성이 될 때 주변의 Context에서 캡쳐링을 하게 된다. 즉 Block외부에 있는 변수들의 값을 상수 형태로 저장한 뒤 사용하게 되는 것이다. Block은 생성되는 시점과 호출되는 시점이 다르다는 특징이 있는데, 이 때 캡쳐링이 장점으로 작용하는 경우가 많다.
첫 번째 경우를 볼 때,
block1
의NSLog(@"%d", val)
은NSLog(@"%d",23);
으로 선언된 것과 다름이 없다.물론
block2
의 경우도NSLog(@"%d",42);
로 선언이 된것과 같은 다르지 않다.하지만 두 번째 경우에는 다르다.
val
을 선언하면서__block
이라는 지시자를 선언해 주었다.__strong, __weak
처럼 변수의 속성을 지시하는 지시자인데, block에서 val이라는 변수를 사용할 때 이 변수의 값을 공유하겠다는 뜻으로 해석할 수 있다. 따라서 이 block이 호출될 때 최종적으로 설정되어 있는val
의 값인 17만 존재하게 되는 것이다.음.. 끝
참조 : http://tvcast.naver.com/apped/playlists
'앱등이에게 살충제를 뿌린다. > iOS' 카테고리의 다른 글
[iOS] Objective-C로 하는 비동기 처리 (0) 2016.01.20 [iOS] Block을 사용할 때 주의해야할 점 : 순환참조(RetainCycle)로 인한 Memory Leak (0) 2016.01.17 Target-Action (0) 2016.01.10 responder object (0) 2016.01.10 [iOS] -(BOOL)writeToFile:atomically: 메소드가 궁금해? (0) 2016.01.03