gpt4 book ai didi

objective-c - 桥接 Actor : __bridge_transfer vs __bridge with synthesized setter

转载 作者:太空狗 更新时间:2023-10-30 03:25:13 24 4
gpt4 key购买 nike

我正在使用 ARC,并且在使用 __bridge_transfer 时感到困惑。我有一个属性 userName 如下:

@property (nonatomic, retain) NSString *userName;
...
@synthesize userName = _userName;
...

案例1:

NSString *name = (__bridge_transfer NSString *)ABRecordCopyCompositeName(person);
self.userName = name;

案例2:

self.userName = (__bridge_transfer NSString *)ABRecordCopyCompositeName(person);

其中 person 的类型为 ABRecordRef

在 CASE 1 中,ARC 会释放局部变量名称(根据我的理解,如果我错了请纠正我),但是在 CASE 2 中会发生什么?我应该在 CASE 2 中使用 __bridge 还是根本不应该使用 CASE 2 ?在 CASE 2__bridge_transfer__bridge 中,如何平衡引用计数?

在 CASE 2 中,使用 __bridge_transfer,ARC 将释放对象(该对象作为参数传递给 setter (void)setUserName :(NSString *)用户名)?

最佳答案

当您调用 ABRecordCopyCompositeName() 时,某人 必须在某个时候释放返回的对象。使用 __bridge_transfer 确保 ARC 将为您释放该对象。如果没有__bridge_transfer,您必须手动释放返回的对象。这是仅有的两个选项。

因此,在这两种情况下您都必须使用__bridge_transfer

一个很好的练习是通过使用 __bridge 而不是 __bridge_transfer 来引发泄漏,然后使用 Xcode 和 Instruments 尝试找到泄漏。编译器会发现泄漏吗?静态分析(项目 -> 分析)是否发现了漏洞? Instruments 是否检测到泄漏?如果是这样,您就会知道如何检查 __bridge_transfer 是否解决了问题。

关于objective-c - 桥接 Actor : __bridge_transfer vs __bridge with synthesized setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14352494/

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