DirTy™의 하루일과/DirTy™의 가당찮은iOS

[IOS] 초보자도 할수있는 block코딩 기법.

DirTy™ 2015. 1. 12. 14:43

아이폰 프로그래밍을 접한지도 꽤 시간이 지났다.

계속 혼자서 하다보니 아무래도 막코딩이라 나조차 알아보기 어려울 정도로 뒤죽박죽인 경우가 많았다. 또 모르는게 많다보니 화면단에서 데이터를 넘긴다던가 클래스로 만들어놓은 오브젝트에서 다른 클래스로 뭔가 통지하거나 데이터를 날린다거나 하는것에 대해 대단히 무지해서 NSNotification만으로 코딩을 하고있었다. 기회가 되어 nhn next에서 4일동안 강의를 들었는데 여기서 강사님이 초보자도 쉽게 할수 있는 block코딩 기법을 알려주셔서 현재 대단히 유용하게 사용하고있다.


강사님왈... block은 그상태를 스냅샷 한 상태라고 생각하시면 됩니다. 라고했다.

근데 진짜 이말이 맞다. block을 걸어놓은 상태에서 block이 실행되면 그상태로 돌아가는... 설명이

맞는줄은 모르겠지만 난 그렇게 생각하고 현재 프로그램들을 수정하였고 NSObject로 전부다 뜯어서

프로그램이 아주 깔끔하게 되었다. 항상 프로그램 하는 나조차도 까먹으니 정리해 놓으려 한다.


// block을 프로퍼티로 설정한다.

@property (nonatomic, strong) void(^LoginInfo)(NSDictionary *, BOOL);


// 인트로 뷰로 진입하면 바로 로그인을 시도한다.

@implementation IntroViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    __weak IntroViewController *weakSelf = self;

// 선언해 놓은 이곳이 스냅샷 상태라고 보면된다. 비동기이고 실행후에 결과값이 이쪽으로 넘어온다.

    ApplicationDelegate.LoginInfo = ^(NSDictionary *dic, BOOL result){

        __strong IntroViewController *strongSelf = weakSelf;

        

        if(strongSelf != nil) {

            [self loginReveiveData:dic result:result];

        }

    };

    

    [ApplicationDelegate makeLoading:self];

    [ApplicationDelegate showLoading];

    [self.waitactivity startAnimating];

    [ApplicationDelegate RequestLogin:NO];

}


// 로그인 실행후 블럭으로 날려준다.

- (void)RequestLogin:(BOOL) logintType{

    [NSURLConnection sendAsynchronousRequest:request

                                       queue:[NSOperationQueue mainQueue]

                           completionHandler:^(NSURLResponse *urlR, NSData *returnData, NSError *e) {

                               if(e == nil) {

                                    NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:&e];

                                    self.LoginInfo(resultDic, YES);

                                } else {

                                    // error!

                                }

                            }];

}