Vas*_*asu 10 objective-c automatic-ref-counting
我正在使用ARC,并且在使用时会产生混淆__bridge_transfer.我有一个属性userName如下:
@property (nonatomic, retain) NSString *userName;
...
@synthesize userName = _userName;
...
Run Code Online (Sandbox Code Playgroud)
案例1:
NSString *name = (__bridge_transfer NSString *)ABRecordCopyCompositeName(person);
self.userName = name;
Run Code Online (Sandbox Code Playgroud)
案例2:
self.userName = (__bridge_transfer NSString *)ABRecordCopyCompositeName(person);
Run Code Online (Sandbox Code Playgroud)
哪里person是类型ABRecordRef.
在案例1中,ARC将发布本地变量名称(根据我的理解,如果我错了,请纠正我),但是在案例2中会发生什么?我应该__bridge在案例2中使用还是不应该使用案例2?在案例2中使用__bridge_transfer或__bridge,如何平衡引用计数?
在CASE 2中,__bridge_transfer将ARC释放对象(该对象,它作为参数传递给setter (void)setUserName:(NSString *)userName)?
Dar*_*ren 21
当你打电话时ABRecordCopyCompositeName(),某人必须在某个时候释放返回的对象.使用__bridge_transfer确保ARC将为您释放对象.如果没有__bridge_transfer,则必须手动释放返回的对象.这是唯一的两个选择.
因此,您必须__bridge_transfer在两种情况下都使用.
一个很好的练习是通过使用__bridge而不是__bridge_transfer使用Xcode和Instruments来尝试找到泄漏来引发泄漏.编译器是否收到泄漏?静态分析(项目 - >分析)是否会发现泄漏?仪器是否会发现泄漏?如果是这样,您将知道如何检查是否__bridge_transfer解决了问题.
| 归档时间: |
|
| 查看次数: |
9995 次 |
| 最近记录: |