Block
-
[iOS] Block을 사용할 때 주의해야할 점 : 순환참조(RetainCycle)로 인한 Memory Leak앱등이에게 살충제를 뿌린다./iOS 2016. 1. 17. 19:28
Block은 캡쳐링을 통해 Context의 걊을 전달하는 기능을 갖고 있습니다. 캡쳐링이 가능하기 때문에 장점을 가지기도 하지만 구멍또한 존재합니다. 1. 문제 발생 예제를 통해서 보겠습니다. 1. ViewController 객체 내부에서 model이란 객체를 strong으로 갖고 있구요. 2. model에서 ViewController를 참조하게 되는 블락을 전달하려고 합니다. Capturing 'self' strongly in this block is likely to lead to a retain cycle. : block에서 self를 강하게 참조하고 있기 때문에 순환참조 발생 가능성이 있습니다.라고 하고있네요. 네. model 객체에서 viewcontroller객체를 강하게 참조하고 있고 view..
-
[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을 ..