iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – __bridge_transfer对NULL对象有效大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设一个方法通过指针返回CFErrorRef.此返回的错误可能为NULl.因此,执行__bridge_transfer仍然是安全的,或者我应该检查NULl.

例如.

CFErrorRef cfError;
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL,&cfError);

NSError *error = (__bridge_transfer NSError *)cfError;

我没有在文档和CFRelease文档中看到任何提及此@L_262_3@的具体说明此值不能为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错误

这个很重要.

>没有记录成功案例中的错误值.
>错误为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对象有效所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。