코드는 다음과 같습니다.
typedef void (^fun) (더블 a, 더블 b);
더블 c = 3;
재미있는 곱셈 = ^(double a, double b) { c = a * b };
곱하기(4, 5);
printf("c = %fn", c);
여기서는 typedef를 사용하는데, 문제는 곱셈을 정의할 때 변수 c를 함께 선언하고, c를 상수로 사용하므로 c = a * b 연산을 수행할 수 없다는 점입니다. c를 수정하려는 경우 한 가지 방법은 __block 접두사를 추가하는 것입니다. 즉, __block double c = 3; 또 다른 방법은 c를 정적 전역 변수로 선언하는 것입니다. 예: static double c = 3;
두 접근 방식 모두 합리적인가요? 답변 부탁드립니다 :)
으아악__block
을 사용하는 방법도 가능하지만,static
은 다음과 같이 작성해야 합니다.이 문제의 본질을 이해하려면 "Objective-C 고급 프로그래밍 iOS 및 OS X 멀티스레딩 및 메모리 관리" 책을 읽어보는 것이 좋습니다.