gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:49:54 26 4
gpt4 key购买 nike

我一直在研究 Using a Directory Enumerator 中的示例在 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);
}
}

}

为什么在相关调用之前将 localizedNameisPackageisDirectory 设置为 nil getResourceValue 方法?这只是过于谨慎还是必要的?

读到the docs对于 getResourceValue:forKey:error: 这似乎是多余的:

Return Value YES if value is successfully populated; otherwise, NO.

Discussion value is set to nil if the requested resource value is not defined for the URL. In this case, the method still returns YES.

我错过了什么吗?

最佳答案

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

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

关于objective-c - Cocoa:为什么在方法调用之前设置 'nil'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com