例如.
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
阅读有关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对象有效所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)