LoginSignup
9
10

More than 5 years have passed since last update.

Java、Objective-Cで実行結果を非同期に取得する方法

Posted at

いつもやり方を忘れてしまうのでメモ

Javaでメソッドの引数にリスナーを渡す

HogeConnection.java
private SearchWebListener searchWebListener;

public void searchWeb(String searchText, SearchWebListener _searchWebListener) {
    searchWebListener = _searchWebListener;


    // 時間がかかる処理を非同期で //

    searchWebListener.didFinish(CONNECTION_NO_ERROR, resultList);

}

public interface SearchWebListener {
    public void didFinish(int err, List<HogeSearchResultData> resultList);  
}

呼び出し側

Hoge.java
HogeConnection hogeConnection = new HogeConnection();
hogeConnection.searchWeb(searchText, new HogeConnection.SearchWebListener() 
    @Override
    public void didFinish(int err, List<HogeSearchResultData> _resultList) {
        if (err == HogeConnection.CONNECTION_NO_ERROR) {

        }
        // エラーの時の処理
        else {

        }                   
    }
}); 

または

Hoge.java

public void hogeMain() {
    HogeConnection hogeConnection = new HogeConnection();
    hogeConnection.searchWeb(searchText, new MySearchWebListener());
}

public class MySearchWebListener implements HogeConnection.SearchWebListene{
    @Override
    public void didFinish(int err, List<HogeSearchResultData> _resultList) {
        if (err == HogeConnection.CONNECTION_NO_ERROR) {

        }
        // エラーの時の処理
        else {

        }                   
    }
}   

またはHoge.javaにHogeConnection.SearchWebListeneをimplementsしてもいい

Objective-CでBlocksを使う


typedef void (^TestMethodBlock)(BOOL arg1, BOOL arg2);

- (void)testMethodWithCompletion:(TestMethodBlock)_completion {

    TestMethodBlock completion = [_completion copy];

    // 別スレッド
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{

        /// 時間のかかる処理 ///

        // メインスレッド
        dispatch_sync(dispatch_get_main_queue(), ^{
            completion(YES, YES);
        });
    });
}

呼び出

    [self testMethodWithCompletion:^(BOOL arg1, BOOL arg2) {

    }];

Objective-Cでdelegateを使った方法

HogeDelegate.h
@protocol HogeDelegate <NSObject>
- (void)didFinish:(NSArray*)_resultList;
@end
HogeConnection.h
#import <UIKit/UIKit.h>
#import "HogeDelegate.h"

@interface HogeConnection : NSObject

@property (nonatomic, weak) id<HogeDelegate> delegate;

- (void)connection;

@end
HogeConnection.m
#import "HogeConnection.h"

@implementation HogeConnection

@synthesize delegate = _ delegate;

- (void)connection {

    // 別スレッド 時間がかかる処理

    [delegate didFinish:resultList];
}

@end

呼び出し側

HogeClass.h
#import <UIKit/UIKit.h>
#import "HogeConnection.h"

@interface HogeClass. : NSObject<HogeDelegate>
@end
HogeClass.m

- (void)hogeMain {
    HogeConnection hogeConnection = [HogeConnection alloc];
    hogeConnection.delegate = self;
    [hogeConnection connection];
}

#pragma mark - hogeConnection delegate
- (void)didFinish:(NSArray*)_resultList {

}
9
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10