'모바일/아이폰'에 해당되는 글 9건
- 2010.11.19
- 2010.11.19
- 2010.11.02
- 2010.11.01
- 2010.10.01
- 2010.07.05
- 2010.06.17
- 2010.05.05
- 2009.06.04
윈도우에서 Objective-C 개발환경 설정하기 2 (Dev-Cpp 사용) (0) | 2010.11.19 |
---|---|
비동기식 이미지 로딩 (0) | 2010.11.02 |
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
전장에서 했던거 계속 이어가용...
이번장에선 Dev-Cpp 첫번째 실행한담에
첫번째 예제돌리는거도 보여드려용
단순히 objc 프레임워크(기본 Objective-C ) 뿐만아니라 Foundation 프레임워크에서 돌아가는 예제를 일부러 놨습니다.
즉,, Dev-Cpp 를 이용해서 Foundation 프레임워크 기반
프로그램을 만들수 있다는 얘기~~
1. Dev-Cpp 를 첫번째 실행하면 뜨는 창- 무시하고 넘어감다.~
2. 우리는 한국인이니까.. 한국어 선택
3. 드디어 나온 첫번째창
4. 이제 슬슬 환경설정해볼가용... 도구 메뉴 > 컴파일러설정
5. 화면에 보시는대로 두개의 체크박스 체크후
첫번째에
-lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import
두번재에
-lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import
를 써줍니다.
6. 자 이제 디렉토리로 이동해서 실행파일 추가를 해볼가용~
실행파일들에
C:\GNUstep\mingw\bin
C:\GNUstep\bin
추가합니다
7. 라이브러리에
C:\GNUstep\mingw\lib
C:\GNUstep\GNUstep\System\Library\Libraries
추가합니다
8. 인클루드에
C:\GNUstep\mingw\include
C:\GNUstep\GNUstep\System\Library\Headers
추가합니다
그리고 확인 버튼....
휴 이미지가 많아서 쉽지않아 ^^;;
마지막장에서 첫번째 예제를 실행해보겠습니다
*<본 강좌는 AppsNext에서 제공되는 강좌입니다. 블로그에 퍼가시거나 카페에 퍼가셔도 좋으나, 반드시 하단에 출처에 AppsNext 를 명시해주시고. 링크도 걸어주셔요>
윈도우에서 Objective-C 개발환경 설정하기 3 (실제 예제실행하기) (0) | 2010.11.19 |
---|---|
비동기식 이미지 로딩 (0) | 2010.11.02 |
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
xml 노드에 이미지 URL 이 있을 경우 비동기식으로 이미지 처리하는것.
UITables with Downloaded Images – Easy Asynchronous Code
http://www.markj.net/iphone-asynchronous-table-image/
Readers… do look through the comments if you plan to use this code, other people have posted improvements. Thanks for all the great feedback everyone. MJ
The app ‘Postcards’ from my iPhone developer training class is a utility app for quickly sending a customized postcard, and one thing that makes it super easy is that you can grab pictures from Flickr to include in the postcard design. Postcards makes simple HTTP calls Flickr’s REST API to download public domain images and displays them in a UITableView for the user to pick from. Cocoa Touch makes this all simple and easy to code, and my first development version used synchronous calls to get the images by using NSData dataWithContentsOfURL:
.
.
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urls]];
Making synchronous calls to remote web servers from the thread that’s running the apps GUI is of course a bad idea that results in a laggy UI and unsatisfied users. Using synchronous calls in UITableView cellForRowAtIndexPath to load all the images results in a problem six times worse (for 6 rows on the screen) and makes scrolling basically broken as the table won’t scroll until it has the next cell, which it can’t get while the app is waiting for an image to download. Then imagine that on the Edge network! Obviously we need something multi-threaded that can load the images in parallel in the background and update the UI as they finish downloading.
Multi-threaded programming is hard and should be avoided whenever possible, and in this case Cocoa’s beautiful design came to my rescue:
UIView heirachy + URL loading system + delegate design = multi-threaded image loading with no multi-threaded coding!
How can you have your cake and eat it too? Every iPhone app is a multi-threaded program, or at least its running in conjuction with the multi-threaded iPhone operating system. Use the right delegate methods in the right ways, and you can take advantage of extra threads of execution that the iPhone gives you for free without writting any multi-threaded code of your own, hence sidesteping the problem of threading bugs in your code. An iPhone app is one big event loop – your classes have methods that the event loop calls in response to stuff happening on the device and in your app. When you use the URL loading system’s asynchronous APIs, the iPhone uses a different thread than the one running your app’s event loop to load the contents of the URL, and it makes callbacks via your apps event loop when data has been downloaded.
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; - (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData
Note carefully, when data has arrived from the remote webserver, that other iPhone thread doing the downloading doesn’t make calls into your objects at the same time as your methods are running, it puts messages into your apps event loop. If it called your app directly then chances are your app would be running some UI code or something and you’d have to write thread safe code. Instead, the call that data is ready arrives as an event on the event loop. Events on the event loop run single threaded, one at a time. Using this we can get asynchrous image download from Flickr without writting thread safe code ourselves. Even better, Cocoa’s URL loading system will download those URLs in parallel! For free!
That’s all well and good, but how do you get a table view to update the UITableViewCell with the image after its already been returned? A UIImage is imutable (right?) so you can’t change its image later when the image data has downloaded. Turns out Apple made this super easy too. Instead of putting a UIImage in the UITableViewCell, you put your own UIView object, that is sized correctly for the image you want to display, into the content view of the UITableCell (as a subview). At first your view object it can be empty, or it can have a dummy image in it, or you can pop in one of those spinny ’something is happening’ views. Then when the image data is downloaded, create a UIImageView with the image and pop it in your view in the cell. Hey presto… it appears. While all this is happening the user can be scrolling and going back and forth with a fully functioning UI.
I put this all together in a class AsyncImageView, listed below. It’s use is simple
LoadImageFromURL will return right away, the image will load in the background, and will automatically appear in the view when its finished downloading. The code posted below is something I whipped up pretty quickly (and I didn’t leak check yet!), but hey – parallel, asynchronous image download and display in about 40 lines of code with no thread-safe worries? Works in smooth scrolling tables, even on the Edge network? I rate it a big win, and wanted to share the technique.
I’ve developed an iPhone programming training class that I will be teaching soon in the SFBay Area (though my partners and I could probably bring it to you). It’s very hands on, and specially designed to help professional programmers new to Cocoa and Objective-C over the difficult initial learning curve. In the class we build the Postcards app from start to finish, including AsyncImageView. Email me for more info: markj at markj.net
@interface AsyncImageView : UIView { NSURLConnection* connection; NSMutableData* data; } @end @implementation AsyncImageView - (void)loadImageFromURL:(NSURL*)url { if (connection!=nil) { [connection release]; } if (data!=nil) { [data release]; } NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //TODO error handling, what if connection is nil? } - (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData { if (data==nil) { data = [[NSMutableData alloc] initWithCapacity:2048]; } [data appendData:incrementalData]; } - (void)connectionDidFinishLoading:(NSURLConnection*)theConnection { [connection release]; connection=nil; if ([[self subviews] count]>0) { [[[self subviews] objectAtIndex:0] removeFromSuperview]; } UIImageView* imageView = [[[UIImageView alloc] initWithImage:[UIImage imageWithData:data]] autorelease]; imageView.contentMode = UIViewContentModeScaleAspectFit; imageView.autoresizingMask = ( UIViewAutoresizingFlexibleWidth || UIViewAutoresizingFlexibleHeight ); [self addSubview:imageView]; imageView.frame = self.bounds; [imageView setNeedsLayout]; [self setNeedsLayout]; [data release]; data=nil; } - (UIImage*) image { UIImageView* iv = [[self subviews] objectAtIndex:0]; return [iv image]; } - (void)dealloc { [connection cancel]; [connection release]; [data release]; [super dealloc]; } @end
And here is the usage in UITableViewCell. The AsyncImageView gets tagged with 999, and when it gets recycled, that 999 tagged view gets fished out and removed. So only the cell is being recycled, not the AsyncImageView object. When its removed from the cells content view it also gets released, causing dealloc, which in turn cancels the url download (if its outstanding).
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"ImageCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; } else { AsyncImageView* oldImage = (AsyncImageView*) [cell.contentView viewWithTag:999]; [oldImage removeFromSuperview]; } CGRect frame; frame.size.width=75; frame.size.height=75; frame.origin.x=0; frame.origin.y=0; AsyncImageView* asyncImage = [[[AsyncImageView alloc] initWithFrame:frame] autorelease]; asyncImage.tag = 999; NSURL* url = [imageDownload thumbnailURLAtIndex:indexPath.row]; [asyncImage loadImageFromURL:url]; [cell.contentView addSubview:asyncImage]; return cell; }
윈도우에서 Objective-C 개발환경 설정하기 3 (실제 예제실행하기) (0) | 2010.11.19 |
---|---|
윈도우에서 Objective-C 개발환경 설정하기 2 (Dev-Cpp 사용) (0) | 2010.11.19 |
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
3. GNUstep System 설치3-완료
4. GNUstep Core 설치1-역시 계속 next
6. GNUstep Core 설치3- 완료
8.Dev-C++ 설치 두번째.. -뭐가있는 지 살펴볼려다가 역시 귀차니즘.. 다음~
9.Dev-C++ 설치 세번째.. -완료
윈도우에서 Objective-C 개발환경 설정하기 2 (Dev-Cpp 사용) (0) | 2010.11.19 |
---|---|
비동기식 이미지 로딩 (0) | 2010.11.02 |
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
XCode 블럭(괄호) 스타일 바꾸기 (0) | 2010.06.17 |
어플을 설치하지 않고, 사파리에서 TV 보기
아이폰 사파리에서 주소창에 http://ev7.net/ 를 입력
시청 가능 공중파 채널 : MBC, SBS, KBS 2TV, KBS24NEWS HD, EBSi, ESB+1, ESB+2, OBS, GTB,
시청 가능 케이블 채널 : MNET, KMTV, SCIENCE, YHNEWS, KCTV, KCTVN, MapoITV, MBN, MTN, WOWTV ....... 등등
이외에도, 종교채널과 NHK 도 시청 가능.
i라이브와 트랜드는 TV 모음 사이트. 지원하는 사이트는 공중파, 케이블, 종교방송등 많다. MBC와 SBS는 저작권 문제로 단추가 비활성화되어 있다. 비활성화된 단추는 몇초 정도 누르고 있으면 시청 가능.
키스코는 스트리밍 서비스만 되는듯. 다만 아이폰 사이트에서 생방송을 제공하며,
생방송을 이용하면 KBS 2 TV를 시청할 수 있고. 방송은 랜덤으로 나오는듯.
i비디오는 TV 사이트는 아니다. 미드나 일드 위주...회원가입했으나.. 로그인하면 로그인 성공했다고 나오지만...로그인이 되지 않는듯 하다..그래서 볼수가 없다....ㅋ
비동기식 이미지 로딩 (0) | 2010.11.02 |
---|---|
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
XCode 블럭(괄호) 스타일 바꾸기 (0) | 2010.06.17 |
애플 추천 어플 (0) | 2010.05.05 |
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
---|---|
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
XCode 블럭(괄호) 스타일 바꾸기 (0) | 2010.06.17 |
애플 추천 어플 (0) | 2010.05.05 |
휴대폰별 개통 확인법 (0) | 2009.06.04 |
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
---|---|
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
애플 추천 어플 (0) | 2010.05.05 |
휴대폰별 개통 확인법 (0) | 2009.06.04 |
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
---|---|
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
XCode 블럭(괄호) 스타일 바꾸기 (0) | 2010.06.17 |
휴대폰별 개통 확인법 (0) | 2009.06.04 |
애니콜햅틱종류 : 다이얼 : 4433366368791
애니콜일반종류 : 매뉴->0 번 길게 눌른후 0821&6725
애니콜옴니아 : 다이얼 : 319712358 -> 비밀번호 : 0821 -> 6 First call <- 개통날자
싸이언구형종류 : 매뉴 0번 길게 147359 -> *, 852456 -> *, 000000 -> *
스카이종류 : 매뉴 ##27732726 종료 1번 Opening Day
KTF EVER 종류 : 메뉴 8번 0번 서비스 코드 입력(Enter Service Code) 292310 입력 시스템 정보
모토로라종류 : 카메라버튼 3회 눌르면 최초등록시간나옴.
VK모바일종류 : 6번 -> 매뉴환경설정 -> 휴대폰정보 개통일확인
그외는 각회사서비스센타에 문의
윈도우에서 Objective-C 개발환경 설정하기 1 (환경설정) (0) | 2010.11.01 |
---|---|
i. live 2.0 지상파 DMB/ 케이블TV 보기 (0) | 2010.10.01 |
원격으로 PC 접속 (0) | 2010.07.05 |
XCode 블럭(괄호) 스타일 바꾸기 (0) | 2010.06.17 |
애플 추천 어플 (0) | 2010.05.05 |