相关疑难解决方法(0)

桥接演员:__ bridge_transfer vs __bridge with synthesis setter

我正在使用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)?

objective-c automatic-ref-counting

10
推荐指数
1
解决办法
9995
查看次数

为UIButton设置边框

我正试图为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不会工作.

objective-c uibutton cgcolor ios

2
推荐指数
1
解决办法
4710
查看次数