Search Results for 'NetworkActivityManager'

ATOM Icon

1 POSTS

  1. 2009/05/21 Network Indicator 관리 하는 singleton class by 장현준 (1)
iPhone 개발 중 Network Indicator(이하 NI)를 사용하다 보면 다음과 같은 경우가 있습니다.

1. thread1에서 network 사용 (NI 켬)
2. thread2에서 network 사용 (NI 켬)
3. thread1이 통신을 마침 (NI 끔)
4. thread2가 통신을 마침 (NI 끔)

이러한 시나리오를 거쳤을 때 UIApplication의 setNetworkActivitryIndicatorVisible값을 변경하는 것 만으로는 문제가 있습니다. 위의 예에서는 3번에서 NI를 껐을 때 thread1은 network를 사용중임에도 불구하고 NI는 꺼져 있는 것으로 나타납니다.

이러한 현상을 해결하기 위해 작성한 singleton class입니다. (singleton class 제작 방법: http://b4you.net/blog/210)

// NetworkActivityManager.h
#import <Foundation/Foundation.h>

@interface NetworkActivityManager : NSObject
{
    volatile NSUInteger _visibleCount;
}

+ (NetworkActivityManager *)sharedNetworkActivityManager;
- (void)setNetworkActivityIndicatorVisible:(BOOL)visible;

@property(readwrite) volatile NSUInteger _visibleCount;

@end


//  NetworkActivityManager.m
#import "NetworkActivityManager.h"

@implementation NetworkActivityManager

@synthesize _visibleCount;

+ (NetworkActivityManager *)sharedNetworkActivityManager
{
    static NetworkActivityManager *networkActivityClass = nil;
    
    if(networkActivityClass == nil)
    {
        @synchronized(self)
        {
            if(networkActivityClass == nil)
            {
                networkActivityClass = [[self alloc] init];
                networkActivityClass._visibleCount = 0;
                [self autorelease];
            }
        }
    }
    
    return networkActivityClass;
}

- (void)setNetworkActivityIndicatorVisible:(BOOL)visible
{
    @synchronized(self)
    {
        if(visible == YES)
        {
            _visibleCount++;
            
            [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
        }
        else if(visible == NO)
        {
            if(_visibleCount <= 1)
            {
                // 모든 곳에서 NO로 했다면
                [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
                _visibleCount = 0;
            }
            else
            {
                // YES로 한 곳이 남아있다면
                _visibleCount--;
            }
        }
    }
}

@end


사용 방법은 다음과 같이~

[[NetworkActivityManager sharedNetworkActivityManager] setNetworkActivityIndicatorVisible:NO];

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2009/05/21 18:25 2009/05/21 18:25
, ,
Response
No Trackback , a comment
RSS :
http://b4you.net/blog/rss/response/225


블로그 이미지

빗소리를 먹는 사람.

- 장현준

Notices

Archives

Authors

  1. 장현준

Recent Trackbacks

  1. 듀얼클러치의 생각 rsvin28's me2DAY 2009

Calendar

«   2012/02   »
      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      

Site Stats

Total hits:
158026
Today:
96
Yesterday:
228