5

Instruments (Leaks) は、TWRequest を使用するとメモリ リークを報告しますが、何が間違っているのかわかりません。

問題を再現する手順は次のとおりです。

新しい Xcode プロジェクト (ARC は無効) を作成し、Twitter フレームワークを追加してから、次の行をコードに追加します (例: viewDidLoad 内):

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET];

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSLog(@"in performrequest");

    [postRequest release];
}]; 

このコードを Instruments (Leaks) でプロファイリングした後、「performRequestWithHandler」の行がリークしていることがわかります。

楽器のスクリーンショット

標線

このリークを防ぐために何をすべきか考えていますか?

ここで同様の質問を見つけましたが、私が説明している問題とは無関係のようです。

4

1 に答える 1

2

なぜインストゥルメントがこれをリークとして検出するのかはわかりませんが、完了ブロックの外でリクエストを解放することができます。要求が開始されると、完了ブロックが実行されるまで接続によって保持されます。コードを次のように変更します。

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET];

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSLog(@"in performrequest");
}];

[postRequest release];

これで漏れも解消されても不思議ではありません。

于 2011-12-29T19:31:48.863 に答える