NSInputStream открыть BAD_ACCESS - PullRequest
       15

NSInputStream открыть BAD_ACCESS

0 голосов
/ 08 декабря 2011

Ниже приведен мой код для загрузки файлов журнала на FTP, и проблема в том, что иногда происходит сбой при выполнении [mInputStream open]. XCode покажи мне BAD_ACCESS. Я думаю, это может быть результатом загрузки файла большого размера. Однако BADACCESS иногда случается, даже размер файла небольшой. Поэтому я думаю, что размер не является основной причиной. Кто-нибудь может помочь? Спасибо миллион.

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

BOOL success;

NSURL *url;
CFWriteStreamRef ftpStream;

mFinish = NO;

mUploadPath = [[NSString alloc] initWithFormat:@"%@/%@",[UtilityHelper logFolderPath],   [mPathList objectAtIndex:0]]; 

//NSLog(@"mUpLoadPath:%d",[mUploadPath retainCount]);
[mPathList removeObjectAtIndex:0];

// check url
url = [UtilityHelper smartURLForString:FTP_URL];
url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", url.absoluteString, [[UIDevice currentDevice] uniqueIdentifier]]];
success = (url != nil);

if (success) {        
    url = [NSMakeCollectable(CFURLCreateCopyAppendingPathComponent(NULL, (CFURLRef) url, (CFStringRef) [mUploadPath lastPathComponent], false) ) autorelease];
    success = (url != nil);
}else
    return;

mInputStream = [[NSInputStream inputStreamWithFileAtPath:mUploadPath] retain];
[mInputStream open];

// Create CFFTPStream for the URL
ftpStream = CFWriteStreamCreateWithFTPURL(NULL, (CFURLRef) url);

assert(ftpStream != NULL);

mNetworkStream = [(NSOutputStream*)ftpStream retain];

NSLog(@"<<<<<<**>retain count:%d", [mNetworkStream retainCount]);

success = [mNetworkStream setProperty:FTP_USERNAME forKey:(id)kCFStreamPropertyFTPUserName];
assert(success);

success = [mNetworkStream setProperty:FTP_PWD forKey:(id)kCFStreamPropertyFTPPassword];
assert(success);

//[mNetworkStream self
mNetworkStream.delegate = self;

[mNetworkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[mNetworkStream open];

CFRelease(ftpStream); 

[pool release];

1 Ответ

1 голос
/ 09 декабря 2011

Во-первых, retainCount это чепуха.Не называй это.Не пытайтесь понять возвращаемое значение.

Во-вторых, ваше приложение падает.Это означает, что есть аварийный журнал или обратный след.Опубликуйте его.

Наконец, ваш вопрос отмечен тегом iOS, но вы звоните NSMakeCollectible();это не имеет смысла.Кроме того, здесь, кажется, есть ряд проблем с управлением памятью.Вы пробовали строить и анализировать?

...