0

Blackraccoon FTPクライアントを使用してFTP操作を実行し、ARCを使用していますが、機器にリークが発生しています。
しかし、サンプルアプリケーションにリークはありませんでしたここに私のコードがあります

 BRRequestCreateDirectory  *createEventDir = [BRRequestCreateDirectory initWithDelegate:nil];
//NSString *EventCode = [[NSUserDefaults standardUserDefaults] stringForKey:kEventCodeKey];
createEventDir.path = @"/12341234";
createEventDir.hostname = @"media.example.com/httpdocs/events/";
createEventDir.username = @"badboy";
createEventDir.password = @"hai!";
createEventDir.tag = 103;
[createEventDir start];
createEventDir = nil;


FTP clentBlackraccoonFTPクライアントからのサンプルコード

ここに画像の説明を入力してください

のような機器にリークが見られますが、私はARCを使用していますが、この問題を解決するのに誰でも助けてくれます。

4

1 に答える 1

2

BlackRaccoonを移植して大幅に変更しました。デリゲートを使用するように設計されています。つまり、代理人が必要です。

BRRequestCreateDirectory  *createEventDir = [BRRequestCreateDirectory      initWithDelegate:nil];
//NSString *EventCode = [[NSUserDefaults standardUserDefaults]     stringForKey:kEventCodeKey];
createEventDir.path = @"/12341234";
createEventDir.hostname = @"media.example.com/httpdocs/events/";
createEventDir.username = @"badboy";
createEventDir.password = @"hai!";
createEventDir.tag = 103;
[createEventDir start];
createEventDir = nil;

間違っている。それは多くのことを開始し、次にオブジェクトを削除します-アクションは未定義です。

代わりに、私が提供したコードに示されているようなものが必要です(それはリークしません)。

まず、ftpを使用するクラスには、デリゲートプロトコルを示すBRRequestDelegateが必要です。

- (IBAction) createDirectory:(id)sender
{
    //----- createEventDir must be a variable in your class...

    createEventDir = [BRRequestCreateDirectory initWithDelegate: self];

    createEventDir.path = @"/12341234;
    createEventDir.hostname = @"media.example.com/httpdocs/events/";
    createEventDir.username = @"badboy";
    createEventDir.password = @"hai!";
    [createEventDir start];

    //----- createEventDir MUST NOT BE DELETED OR SET TO NIL HERE
}

次に、(少なくとも)2人の代理人が必要です。

-(void) requestCompleted: (BRRequest *) request
{
    //----- handle Create Directory
    if (request == createEventDir)
    {
        NSLog(@"%@ completed!", request);
        //----- everything is done, NOW you can set it to nil
        createEventDir = nil;
    }
}  

-(void) requestFailed: (BRRequest *) request
{
    if (request == createEventDir)
    {
        NSLog(@"%@", request.error.message);
        //----- everything is done, NOW you can set it to nil
        createEventDir = nil;
    }
}

戻って私のテストコードを見ると、物事がどのように機能するかがわかります。それでも問題が解決しない場合は、http: //github.com/lloydsargent/BlackRaccoonに問題を投稿してください

うまくいけば、これはあなたがあなたの問題を乗り越えるでしょう。

于 2012-08-07T01:15:35.230 に答える