将NSData对象分配给另一个NSData对象的逻辑

蒙蒂

我继承了用Objective C编写的应用程序。它是一个使用Sandisk提供的SDK写入外部Sandisk iXpand USB驱动器的应用程序。

有时,我看到应用程序崩溃,因为进程取消引用了NULL指针,因此似乎终止了该进程。

这使我想到了一个有关NSData对象“ * _writeData”设置为等于另一个NSData对象“ srcData”时使用的逻辑的问题。我想知道srcData是否有时由于某种原因为NULL并导致崩溃。

因此,有人可以解释做这句话是否合乎逻辑?在我看来似乎是多余的:

NSData *_writedata = srcData

为什么不直接像这样直接使用srcData:

dataCount = [[iXpandFileSystemController sharedController] writeFile:createResult writeBuf:srcData writeSize:(uint32_t)trans];

如果这样做NSData *_writedata = srcData合乎逻辑的,那么当它指向NULL指针时,有没有一种方法可以保护或捕获它。

这是我指的代码块:

int total = 0;
    int startByte = 0;
    int  singleTransfer = 8 * 1024 * 1024;
    long createResult = 0;

    [[iXpandFileSystemController sharedController]  deleteFileAbsolutePath:dstPath];
    createResult = [[iXpandFileSystemController sharedController] openFileAbsolutePath:dstPath openMode:OF_CREATE | OF_WRITE];

    NSError* error;
    NSFileHandle* fileHandler = [NSFileHandle fileHandleForReadingFromURL:videoURL error:&error];

    uint32_t dataCount = 0;
    NSTimeInterval startTime = [[NSDate date] timeIntervalSince1970];

    while(true){
        @synchronized(self) {
        @autoreleasepool {

        NSData* srcData = [fileHandler readDataOfLength:singleTransfer];
        if([srcData length] == 0){
            break;
        }

        int len = (int)[srcData length];

        int trans = len;
        NSData *_writeData = srcData;

        dataCount = [[iXpandFileSystemController sharedController] writeFile:createResult writeBuf:_writeData writeSize:(uint32_t)trans];
        NSLog(@"writing data  %ld bytes", dataCount);

        if (dataCount == -1)
        {
            [self.consoleString  appendString:[NSString stringWithFormat:@"[%@] [Failed  ] ------ Failed \n", [self convertDateFormat:[NSDate date]]]];

            return NO;
        }
        total += trans;

        }
        }
    }
CRD

如果这样做NSData *_writedata = srcData合乎逻辑的,那么当它指向NULL指针时,有没有一种方法可以保护或捕获它

由于上述原因,在您的代码中执行上述分配时srcData已知为非空:

if([srcData length] == 0){
   break;
}

[srcData length]如果srcData为null或为非null,表达式的计算结果为零,length返回零。因此,一旦过去srcData就知道它是非空的。

你是正确的,分配到两个_writeDatatrans是多余的,但无害。

无论您遇到什么问题,都不是这些任务。

打得好!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将一个对象分配给另一个对象Javascript

当使用=将一个对象分配给另一个对象时,将进行复制类型

将一个对象分配给同一类的另一个对象

将(OOP)对象分配给另一个

将函数的返回IEnumerable <MovingAverage>值分配给另一个对象

将另一个子类的对象分配给指向的地址[C ++]

可以将一个对象分配给另一个具有不同类型的对象

将一个对象的值分配给另一个对象时的奇怪行为

如何使用 Scanner 将一个对象分配给另一个对象

在Java中将一个对象分配给另一个对象

将分配对象常量的对象同时分配给新数组,并同时将forEach分配给另一个数组

在将对象分配给另一个对象时查询对象的地址

如何将一个可观察的KnockoutJs分配给另一个可观察的对象?

如何将一个lambda表达式对象分配给另一个?

如何将值从一个对象分配给另一个

如何将特定属性从一个对象分配给另一个

解构对象并分配给一行中的另一个对象

如何将现有文件对象分配给另一个文件对象

C ++如何在将新对象分配给另一个对象的同时创建它

在声明对象时将对象属性值分配给另一个属性

过滤数组中的对象并将其分配给另一个对象

随机类-将对象分配给另一个对象

在将对象分配给另一个对象之前检查是否相等

对象的好处分配给Java中的另一个对象

如何访问分配给另一个对象的属性的数组内的对象的属性?

Typescript - 如何将部分类型分配给另一个对象的相同类型的属性?

将Web浏览器控件对象分配给另一个Web浏览器控件

在C ++中将一个类对象分配给另一个类对象

将对象分配给另一个线程