Cocoa:为什么在方法调用之前设置'nil'?

daw*_*awg 1 methods null cocoa objective-c

我一直在研究 Apple低级文件部分中使用目录枚举器中的示例.

这是一段代码:

for (NSURL *url in enumerator) {

// Error-checking is omitted for clarity.

NSNumber *isDirectory = nil;
[url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:NULL];

if ([isDirectory boolValue]) {

    NSString *localizedName = nil;
    [url getResourceValue:&localizedName forKey:NSURLLocalizedNameKey error:NULL];

    NSNumber *isPackage = nil;
    [url getResourceValue:&isPackage forKey:NSURLIsPackageKey error:NULL];

    if ([isPackage boolValue]) {
        NSLog(@"Package at %@", localizedName);
    }
    else {
        NSLog(@"Directory at %@", localizedName);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

为什么localizedName,isPackage以及isDirectory被设置为nil之前有关调用的getResourceValue方法?这只是一个过分谨慎还是需要这个?

阅读文档时,getResourceValue:forKey:error:它似乎是多余的:

返回值如果成功填充了值,则返回YES; 否则,不.

如果未为URL定义请求的资源值,则将讨论值设置为nil.在这种情况下,该方法仍然返回YES.

我错过了什么吗?

Ano*_*mie 5

此代码不检查getResourceValue:forKey:error:方法是否实际成功.相反,假设传递的变量在方法失败时设置为nil或保持不变.这可能不是一个有保证的假设; 似乎没有记录失败时的行为.

如果它们未事先初始化,"保持不变"将通过使用未初始化的堆栈变量导致未定义的行为.