objective-c - 将 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;
}
}
}
解决方案
如果这是合乎逻辑的事情,当它指向一个指针
NSData *_writedata = srcData
时,有没有办法保护或捕获。NULL
在您的代码中,当执行上述赋值时,srcData
由于前面的原因,已知它是非空的:
if([srcData length] == 0){
break;
}
如果为 null 或非 null 并返回零,则表达式[srcData length]
将计算为零。因此,一旦过去,就知道它是非空的。srcData
length
srcData
您是对的,对两者的分配_writeData
都是trans
多余的但无害的。
无论您的问题是什么,都不是这些作业。
好狩猎!
推荐阅读
- html - 使用html从外部源更改按钮的颜色?
- anychart - Anychart 缩放非地图图表类型
- javascript - 使用 React JavaScript 的 Spring-Boot
- android - onActivityResult 返回空数据
- python - Python绘图字典
- python - 一次访问多个索引行时有效地迭代 pandas.DataFrame
- javascript - 从 JsonConvert.SerializeObject(obj) 返回的 JSON 在 Json.parse 中返回“Unexpected token &”
- unity3d - GPGS Unity 插件 - 网络延迟检查和同步
- javascript - 为什么具有相同属性的两个对象不能以相同的方式工作
- wordpress - FacetWP 显示所有选项和方面