본문 바로가기

iOS개발팁

트윗 WWDC10



WWDC10을 보면서 트위터(@skyfe79) 에 글을 남기고 있습니다. 한 세션이 끝나면 블로그에 모아서 올리려고 합니다. 잡담 형식이라 도움이 안 될 수도 있지만 ;;;  모든 세션을 볼 때까지 써 볼랍니다 :)

첫번째로 Objective-C언어에 새로 추가된 람다형식의 익명메서드 Blocks와 Blocks와 찰떡궁합인 새로운 쓰레드 관리 시스템 GCD에 대한 내용입니다.

Introducing Blocks and Grand Central Dispatch on iPhone
@skyfe79

#wwdc10 #s206 Introducing Blocks and Grand Central Dispatch on iPhone 에 Blocks의 얘기가 있군요^-^

#wwdc10 #s206 Blocks는 람다형식의 익명함수이며 Grand Central DisPatch는 Blocks에 접근하는 런타임API라고 합니다. Blocks의 예 [obj do: ^{ int i=10; return i} ];

#wwdc10 #s206 인자가 있는 Blocks는 [obj do: ^(id someone, id value) { return [someone wantsIt:value]; }]; 이런 식입니다. 더 봐야겠네요 ^^

#wwdc10 #s206 Blocks가 대박인 이유는 C언어에도 적용해서 사용할 수 있습니다!. doingIt( ^{ [someone says:@"와우! 대박!"]);

#wwdc10 #s206 Blocks의 함수 인자 문법은 C 형식을 따라서 다행이라는 생각이 드네요. 람다 쓰면서 인자의 레이블까지 적어야 한다고 생각하면 생각만 해도 끔찍하네요 ㅎㅎㅎ

#wwdc10 #s206 Blocks와 찰떡궁합인 Grand Central Dispatch 줄여서 GDC는 쓰레딩 관리를 아주 멋지게 해결준다고 하네요. 쓰레드를 여러개 쓰고 있지만 쓰레드 관리 코드를 명시적으로 써줄 필요가 없다고합니다.

#wwdc10 #s206 GCD 너무 근사합니다. 쓰레드를 만들어 비동기로 해야할 작업이 있으면 dispatch_async(queue, ^{ doing something; }); 이걸로 끝입니다.

 #wwdc10 #s206 큐에는 여러가지가 있는데요 image_queue, main_queue 이런 식이구요 main_queue가 메인쓰레드가 관리하는 큐입니다.

#wwdc10 #s206 작업스레드가 작업하며 자신의 큐에 결과물을 쌓고 dispatch_async(main_queue, ^{ 메인쓰레드에 업데이트(대부분UI) 작업 }) 식으로 해서 쓰레들간에 큐를 이용해 작업결과를 주고 받는 구조인 것 같습니다^^

#wwdc10 #s206 제가 잘 못 이해했네요. 각 큐는 Blocks를 담고 main_queue는 메인쓰레드가 큐에있는 블럭을 실행하고 PT의 예에서 image_queue의 블럭은 자동으로 쓰레드가 생성되어 큐에 있는 블럭을 실행하는 구조입니다 에공

dispatch_async(image_queue, ^{
    tw.img = [imageCache getImageFromURL:url];
    dispatch_async(main_queue, ^{
        [tweets updateTweet:tw display:YES];
    });
});

#wwdc10 #s206 이처럼짜면 이미지큐에 이미지를 받아오고 메인큐에 UI를 업데이트시키는 블럭을 추가되고 자동으로 스레드가 실행되어 이미지를 받아온 후 메인큐에 UI를 업데이트시키는 블락이 추가되어 자동으로 메인스레드가 UI를 업데이트하게됩니다.

#wwdc10 #s206 GCD가 오픈소스프로젝트였군요. 후아! http://is.gd/cUtv6 정말 멋지다라는 말 밖엔...

'iOS개발팁' 카테고리의 다른 글

아리송한 ObjC의 레퍼런스 카운트  (2) 2010.07.15
트윗 WWDC10  (0) 2010.06.19
SIO2와 Blender를 만나다.  (2) 2010.06.14
아이폰, 사용가능한 장치 확인하기.  (2) 2010.06.14
쿼츠2D 튜토리얼...2  (0) 2010.05.18