【问题标题】:FTP,Blackraccoon Memory leaksFTP、Blackraccoon 内存泄漏
【发布时间】:2012-08-02 07:04:14
【问题描述】:

我正在使用 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 客户端的示例代码 Blackraccoon FTP client

在仪器中显示泄漏,但我使用的是 ARC 谁能帮我解决这个问题..

【问题讨论】:

  • 解决了内存泄漏和崩溃问题。问题不在于 BlackRaccoon 的工作良好。根据我的需要,我更改了 BRRequestDelegate。通过将委托属性更改为 unsafe__unretained 解决了问题。

标签: ios ftp automatic-ref-counting blackraccoon


【解决方案1】:

我移植并大量修改了 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
}

那么你必须有两个代表(至少):

-(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 上的问题中发帖

希望这可以帮助您解决问题。

【讨论】:

    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    • 2013-06-24
    相关资源
    最近更新 更多