我正在使用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)?
我正试图为UIButton保留边框.如果我使用以下代码,它正在工作.
情况1
[[_myButton layer] setBorderWidth:1.0f];
[[_myButton layer] setBorderColor:[UIColor lightGrayColor].CGColor];
Run Code Online (Sandbox Code Playgroud)
但在我写作之前:
self.baseTypeButton.layer.borderWidth=2.0f;
self.myButton.layer.borderColor=[UIColor lightGrayColor];
Run Code Online (Sandbox Code Playgroud)
XCode建议我这样做
现在我的代码发生了变化,但在这种情况下我没能设置边框:
案例:2
_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=(__bridge CGColorRef _Nullable)([UIColor lightGrayColor]);
Run Code Online (Sandbox Code Playgroud)
我没有使用自动布局.任何人都可以解释case-1和case-2之间的区别.为什么案例2不会工作.