iOS2012. 9. 22. 00:30

////////////////////////////////////////////////////////////////////////////////////
// 앱 정보 가져오기
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];

// 앱 버전
NSString *szAppVersion = [ infoDict objectForKey:@"CFBundleShortVersionString"];
// 빌드 버전
NSString *szAppBuildVer = [ infoDict objectForKey:@"CFBundleVersion"];
// 앱 이름
NSString *szAppName= [ infoDict objectForKey:@"CFBundleDisplayName"];

Posted by 다오나무
iOS2012. 9. 18. 15:10

지난 강좌에서는 동기식으로 이미지를 가져오는 것을 구현했습니다. 하지만 동기식으로 데이터를 가져올 경우 용량이 큰 데이터에서 앱이 멈춰버리는 현상을 발견할 수 있습니다. 이처럼 앱이 멈추는것과 같은 현상을 제거하기 위해서는 비동기식으로 데이터를 가져와야합니다. 이번 강좌에서는 비동기식으로 데이터를 가져오는 방법, 그중에서 NSThread를 이용하는 방법에 대해서 알아보겠습니다.


 비동기식으로 데이터를 읽어온다면 앱의 사용자에게 '지금은 데이터를 로딩하는 중입니다.' 라는 것을 알리기 위한 방법이 필요합니다. 그 중에서 가장 많이 사용되는 방법은 Indicator를 사용하는 방법입니다. (데이터를 로딩하면 빙글빙글 돌아가는 그것입니다.) 프로젝트의 헤더에서 아래와 같이 구성해준 후 인터페이스 빌더에서 연결해줍니다.





 본 프로젝트에서는 뷰가 로드됨과 동시에 이미지를 읽어온다고 했지만, 개발자의 사정에 맞춰서 적당한 순간에 데이터를 로드하면 되겠습니다.



 우선 뷰가 로드되고 동시에 데이터를 읽어오므로 indicator를 start 해줍니다. 대부분의 사항은 상단의 코드와 주석을 봐도 충분히 이해 될 것이라고 생각합니다. 이 방법의 기본 개념은 '같은 스레드에서 이미지를 로딩하면 데이터가 로드되는 코드에서 앱이 멈춰버리고 코드가 진행되질 않으니 데이터를 로딩하는 부분만 다른 스레드에서 실행되게 하자' 입니다. 그래서 이처럼 데이터를 로드하는 부분만 따로 메서드로 구현해줍니다.




 데이터를 로드하는 부분에서 이처럼 데이터를 로드하고 이미지를 세팅하는 것 까지 구현해줍니다. 이제 앱을 실행시키면 Indicator가 돌아가다가 이미지의 로드가 끝나게 되면 Indicator가 사라지고 이미지가 화면에 출력됩니다. 단지 데이터를 읽어오는 부분만 리팩토링하여 스레드로 실행시키기만 하면 동기식 데이터 로드가 비동기식으로 전환 되는 것입니다.

Posted by 다오나무