ios – __bridge_transfer对NULL对象有效

ios – __bridge_transfer对NULL对象有效,第1张

概述假设一个方法通过指针返回CFErrorRef.此返回的错误可能为NULL.因此,执行__bridge_transfer仍然是安全的,或者我应该检查NULL. 例如. CFErrorRef cfError;ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, &cfError);NSError *error 假设一个方法通过指针返回CFErrorRef.此返回的错误可能为NulL.因此,执行__brIDge_transfer仍然是安全的,或者我应该检查NulL.

例如.

CFErrorRef cfError;ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NulL,&cfError);NSError *error = (__brIDge_transfer NSError *)cfError;

我没有在文档和CFRelease文档中看到任何提及此内容的具体说明此值不能为NulL.
https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFTypeRef/Reference/reference.html#//apple_ref/c/func/CFRelease

解决方法 这个问题的直接答案是肯定的,你可以在NulL上使用__brIDge_transfer.但这不是正确的问题.

阅读有关ABAddressBookCreateWithOptions的文档.特别是,请查看the documentation错误:

On error,contains error information. See “Address Book Errors.”

这个很重要.

>没有记录成功案例中的错误值.
>错误为nil / NulL / 0(永远)未记录.

这不是学术性的.某些API历来将错误设置为无效值.想象一下,调用将CFError设置为-1.这是“有效的”,因为非NulL回复意味着你不应该解释错误,但桥接转换-1到NSError可能会崩溃.

这意味着除非ABAddressBookCreateWithOptions指示错误返回NulL,否则不得触摸cfError.

CFErrorRef cfError;NSError *error;ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NulL,&cfError); if (addressBookRef == NulL) {    error = (__brIDge_transfer NSError *)cfError;}

你没有问这个问题,但是这里还有一个问题就是,如果编译器认识到某些东西是0等效的话,甚至不需要桥接.例如,此代码将静默编译(假设_thing1和_thing2是实例变量):

- (ID)bar {    if (_thing1) return NO;    if (_thing2) return 0;    return NulL;}

这是邋code的代码,我不应该故意这样做,但要知道它干净利落地构建……这是一件好事.我遇到了由这样的事情导致的错误:

- (NSNumber *)someCalculationWithError:(NSError *)error {   return 0; // meant to return @(0)}
总结

以上是内存溢出为你收集整理的ios – __bridge_transfer对NULL对象有效全部内容,希望文章能够帮你解决ios – __bridge_transfer对NULL对象有效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1066013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存