티스토리 뷰

Mobile/iOS

[iOS]함수 포인터와 코드 블럭

out of coding 2016. 1. 26. 17:26

함수 포인터.

말 그대로 포인터로 함수를 넘겨주는것.


문법을 설명하면...

다음과 같은 함수가 있다고 하고...


int addNum(int a, int b) {

return a+b;

}


다음과 같이 선언을 하게 된다.


int (*funcTest)(int, int) = addNum;


사용방법은 다음과 같음


int sum = funcTest(1, 10);


결과 값은 11이 됩니다.


문법의 설명은.

int : return형

(*funcTest) : funcTest라는 변수? 함수 포인터

(int, int) : int형 para를 두개 받는 형태


구조체로 표현이 가능한데...

위의 설명에서 표현한 함수는 일단 디폴트로 있다고 생각을 하고...


struct haha {

int a;

int b;

int (*sum)(int, int);

}


사용은

struct haha hihi = {2, 10};

hihi.sum = addNum;

int sum = hihi.sum(hihi.a, hihi.b);


결과값은 12가 됩니다.

참 쉽죠?


코드 블럭.

Objective-C 2.0에서 도입되었으며. xcode 4로 넘어오면서 구현이 가능하게 되었다고 한다.

함수 포인터랑 거의 흡사하게 동작을 하며, 비동기적으로 동작한다.

함수 포인터와 다른점은 이녀석이 선언되는 순간 메모리의 값들이 저장이 된다. 스냅샷이 찍힌다고 누가 표현하던데...

적절한 표현인듯.


문법을 설명하면 다음과 같이 표현이 가능하다.


int (^blockTest)(int) = ^(int num) {

return num * 2;

}


int : return 형

(^blockTest) : blockTest라는 이름의 코드 블럭.

(int) : param 값


사용방법은 함수포인터와 거의 흡사하다.


int value = blockTest(10);

결과 값은 20으로 나오게 된다.


물론 구조체로 표현이 가능하다.

사용 방법은


struct haha {

int a;

int b;

int (^sum)(int, int);

}


이렇게 선언된 구조체의 값을 사용하도록 한다.


struct haha hihi = {1, 2};

hihi.sum = ^(int a, int b) {

return a+b;

}

int sum = hihi.sum(hihi.a, hihi.b);


재미있는 문법이다. 자바에서는 그냥 쓰던거 같은데 ㅋㅋ

그냥 외우자.

'Mobile > iOS' 카테고리의 다른 글

[iOS]iPhone용 Splash Image  (0) 2016.01.27
[iOS]아이폰 화면 꺼짐 방지  (0) 2016.01.27
[iOS]View가 Load 될 경우  (1) 2016.01.19
[iOS]Nib 불러와서 사용하기  (0) 2016.01.19
[iOS]최상위 ViewController 확인  (0) 2015.11.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함