1

非常に奇妙な問題が発生しました。xcode で [実行] ボタンをクリックすると、コードが思うように実行されます。

しかし、アーカイブした後、同じiPhone(4s、6.1.3)にインストールします

思うようにブロックが進まない。

古い ASIHttpRequest API を使用していました。

ここに私のプロジェクトのコードがあります

1. シングルトン クラスが API 呼び出しを処理する

    APICall.h

    typedef void (^CompleteHandler)(NSMutableArray *);

    - (void)listAllHistoryData:(CompleteHandler)theBlock;

    APICall.m

    - (void)listAllHistoryData:(CompleteHandler)theBlock{
    __weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:eWhereListAllDataURL];
    request.delegate = self;
    [request setRequestMethod:@"GET"];
    [request setCompletionBlock:^{
        NSString *response = [request responseString];
        NSData *data = [response dataUsingEncoding: NSUTF8StringEncoding];
        _sessionList = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] objectForKey:@"all_sessions"];
            theBlock(_sessionList);
    }];
    [request startAsynchronous];
}

2.ビューコントローラー

- (void)viewDidLoad{
    [[APICall shareInstance] listAllHistoryData:^ (NSMutableArray *list) {
            dataList = [NSMutableArray arrayWithArray:list];
            }
                [theTableView reloadData];
        }];

これらのコードを投稿するのと同じように...

プロジェクトをアーカイブした後、何が違うのかわかりません。

とにかく、答えやコメントをありがとう

ウェバー

4

2 に答える 2

2

あなたのローカル変数は __weak です

ARC は、requestWithURL: ... を返す分、この参照を無効にすることができます (戻り値は保持カウントを減少させ、__weak はそれを増加させません)。したがって、リクエスト変数は解放され、startAsynchronous を呼び出す前に nil に設定されます。

なぜそのローカル変数を __weak にしたのですか? コードを削除するときに、コードに関係する壊れない保持サイクルはありません。完了ブロックは、呼び出された後に無効化(および解放/破棄)されると思います。

これが当てはまらず、ここに真のリークがある場合は、メソッド中に吹き飛ばされないように、ASIFormDataRequest への別の非弱い参照を作成する必要があります。

AdHoc バージョンが機能しない理由は、AdHoc が Release ターゲットを使用して構築されているためです。これにより、最適化が有効になります (LLVM がより厳密な方法で ARC を介してオブジェクトを強制終了すると思います)。

于 2013-07-03T02:47:48.917 に答える
0

__weak Request が Xcode のリリース モードでリリースされました。これらの違いは、Target - Build Settings - Optimization Level in Debug & Release で確認できます。

ビルドフェーズで「-O0」を追加するクラスの下の設定-ソースのコンパイル ASIFormDataRequest.m ASIHTTPRequest.m は私にとってはうまくいきます。

それが役立つことを願っています

于 2013-10-05T07:49:58.223 に答える