ios 스레드 동작 중 Activity Indicator사용

네트웍을 통한 데이터 송수신 등 시간이 걸리는 작업 시 thread 및 Activity Indicator사용을 많이 합니다.

performselector로 인디케이터 돌리고 작업시킨 다음 indicator 핸들로 stop를 했더니 일반적인

경우에는 잘 작동하였으나 performselector가 해당 함수를 호출하기 전에 아래 작업이 모두 끝나고

indicator stopAnimation까지 호출되는 상황 발생. 그 늦게 발동한 indicator의 무한 뺑뻉이...

 

그래서 stop도 performselector로 호출.

 

아래는 작업한 소스코드

 

//
//
//  Created by likehood on 12. 1. 30..
//


//in AppDelegate.h
@interface CAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
-(void) threadStartActivityIndicator:(UIActivityIndicatorView*) indi;
-(void) threadStopActivityIndicator:(UIActivityIndicatorView*) indi;
@end

//  AppDelegate.m
-(void) stopActivityIndicator:(UIActivityIndicatorView*) indi
{
    [indi stopAnimating];
    [indi removeFromSuperview];
    NSLog(@"STOP INDICATOR");
}
-(void) startActivityIndicator:(UIActivityIndicatorView*) indi
{
    UIWindow*   appWindow = [UIApplication sharedApplication].keyWindow;
    indi.color = [[UIColor alloc] initWithWhite:0.5 alpha:1];//  initWithRed:1 green:0 blue:0 alpha:1.0 ];
    CGRect rectCenter=appWindow.frame;
    rectCenter.size.height=rectCenter.size.height;
    [indi setFrame:rectCenter];
    [appWindow addSubview:indi];
    [indi bringSubviewToFront:appWindow];
    indi.hidesWhenStopped  = YES;
    [indi startAnimating];
    NSLog(@"START INDICATOR");
}
//in using class  .m

-(void) threadLoadList
{
    UIActivityIndicatorView*      indi=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    CNIAppDelegate* delegate = (CNIAppDelegate*)[[UIApplication sharedApplication] delegate];
    [delegate performSelector:@selector(startActivityIndicator:) onThread:[NSThread mainThread] withObject:indi waitUntilDone:NO];
    //
    // thread code here
    //
   
    [delegate performSelector:@selector(stopActivityIndicator:) onThread:[NSThread mainThread] withObject:indi waitUntilDone:YES];
    [NSThread exit];
}

- (void) loadList
{
    [NSThread detachNewThreadSelector:@selector(threadLoadList) toTarget:self withObject:nil];
}

Trackbacks 0 / Comments 0

Leave Comments

XCODE 4.6 업데이트 후 메소드 워닝

수많은 메소드 선언부에 나타나는 아래와 같은 메세지..

used as the name of the previous parameter rather than as part of the selector

 

컴파일러가 메소드 선언시에 애매하게 사용한 부분에 대한 워닝을 강화한 듯 하다.

워닝을 없애기 위해서 해야할 일은 명확하게 선언하는 것. 더불어 메소드 사용이 잘못된 파라메터 인수를 넘기는

실수를 예방하는 효과까지 있으니 이제부터라도 메소드 선언을 명확히 하자.

 

- (void)setWH:(int) w:(int)h; // 'w' used as name of previous parameter rather than as part of selector

메소드 선언후 컴파일 하면 위 주석과 같은 워닝이 발생한다. objective c의 특징을 잘 활용하기 위해서는 아래와 같이 선언하고 사용하는게 좋지않을까..

- (void) setW:(int)w h:(int)h;

또는, 더 명확한? 사용을 위해서는..

- (void) setWidth:(int)width height:(int)height;

오늘 xcode업뎃하고 수없이 많이 나온 메소드선언 워닝.. 일단 무시하고 새롭게 선언되는 메소드부터 차근차근적용하자.

 

 

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

ios 스레드 동작 중 Activity Indicator사용  (0) 2013.03.07
betabuilder를 이용하여 ios Adhoc 배포시 주의사항  (0) 2013.03.07
XCODE 4.6 업데이트 후 메소드 워닝  (0) 2013.02.13
ios Custom Cell Row Height설정  (0) 2013.02.06
제곱근  (0) 2012.07.16
Hotkey Agent 1.0  (0) 2009.12.28

Trackbacks 0 / Comments 0

Leave Comments